Třídy a objekty Pythonu - objektově orientované programování



Tento blog o „Python Class“ se zabývá základy třídy, atributů a různých konceptů OOPS, jako je dědičnost, polymorfismus a zapouzdření.

Poté, co Stack Overflow předpověděl, že do roku 2019 Python předstihne další jazyky, pokud jde o aktivní vývojáře, poptávka po jen roste.Python se řídí objektově orientovaným paradigmatem programování. Zabývá se deklarováním tříd pythonu, vytvářením objektů z nich a interakcí s uživateli. V objektově orientovaném jazyce je program rozdělen na samostatné objekty nebo můžete říci na několik miniprogramů. Každý objekt představuje jinou část aplikace, která mezi sebou může komunikovat.
V tomto blogu tříd pythonu pochopíte každý aspekt tříd a objektů v následujícím pořadí:

Začněme.:-)





Co je to Python Class?

Třída v pythonu je plán, ze kterého jsou vytvořeny konkrétní objekty. Umožňuje vám strukturovat software zvláštním způsobem. Přichází otázka jak? Třídy nám umožňují logicky seskupit naše data a fungovat způsobem, který je snadno znovu použitelný a způsobem, na kterém lze v případě potřeby stavět. Zvažte následující obrázek.

java kód pro ukončení programu

ClassesAndObjects - třída Python - EdurekaNa prvním obrázku (A) představuje plán domu, který lze považovat za Třída . Se stejným plánem můžeme vytvořit několik domů a ty lze považovat za Objekty . Pomocí třídy můžete svým programům přidat konzistenci, aby je bylo možné používat čistším a efektivnějším způsobem. Atributy jsou datové členy (proměnné třídy a proměnné instance) a metody, ke kterým se přistupuje prostřednictvím tečkové notace.



  • Proměnná třídy je proměnná, která je sdílena všemi různými objekty / instancemi třídy.
  • Proměnné instance jsou proměnné, které jsou jedinečné pro každou instanci. Je definován uvnitř metody a patří pouze k aktuální instanci třídy.
  • Metody jsou také nazývány jako funkce, které jsou definovány ve třídě a popisují chování objektu.

Pojďme se nyní podívat, jak to funguje v PyCharm. Chcete-li začít, nejprve se podívejte na syntaxi třídy pythonu.

Syntax :

třída Název_třídy: výpis-1. . prohlášení-N

Zde je „ třída' příkaz vytvoří novou definici třídy. Název třídy bezprostředně následuje za klíčovým slovem „ třída' v pythonu, za nímž následuje dvojtečka. Chcete-li vytvořit třídu v pythonu, zvažte následující příklad:



zaměstnanec třídy: předat #no atributy a metody emp_1 = employee () emp_2 = employee () # proměnnou instance lze vytvořit ručně emp_1.first = 'aayushi' emp_1.last = 'Johari' emp_1.email='aayushi@edureka.co 'emp_1.pay = 10 000 emp_2.first =' test 'emp_2.last =' abc 'emp_2.email='test@company.com' emp_2.pay = 10 000 tisk (emp_1.email) tisk (emp_2.email)

Výstup -

aayushi@edureka.co test@firma.com

A co když nechceme tyto proměnné nastavovat ručně. Uvidíte spoustu kódu a také je náchylný k chybám. Aby to bylo automatické, můžeme použít metodu „init“. Pojďme si tedy uvědomit, co přesně jsou metody a atributy ve třídě pythonu.

Metody a atributy ve třídě Pythonu

Vytvoření třídy je nyní bez některých funkcí neúplné. Funkce lze tedy definovat nastavením různých atributů, které fungují jako kontejner pro data a funkce související s těmito atributy. Funkce v pythonu se také nazývají jako Metody . Když už mluvíme o inic metoda , je to speciální funkce, která je volána vždy, když je vytvořen nový objekt této třídy. Můžete to považovat za inicializační metodu nebo to můžete považovat za konstruktory, pokud přicházíte z jiného objektově orientovaného programovacího prostředí, jako je C ++, Java atd. Nyní, když nastavíme metodu uvnitř třídy, dostanou instanci automaticky. Pojďme do třídy pythonu a pomocí této metody přijměte křestní jméno, příjmení a plat.

zaměstnanec třídy: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' emp_1 = zaměstnanec ('aayushi', 'johari', 350000) emp_2 = zaměstnanec ('test', 'test', 100000) tisk (emp_1.email) tisk (emp_2.email)

Nyní jsme v rámci naší metody „init“ nastavili tyto instance proměnných (já, první, poslední, sal). Self je instance, což znamená, že kdykoli napíšeme self.fname = first, je to stejné jako emp_1.first = ‘aayushi‘. Pak jsme vytvořili instance třídy zaměstnanců, kde můžeme předat hodnoty určené v metodě init. Tato metoda bere instance jako argumenty. Místo toho, abyste to udělali ručně, bude to provedeno automaticky Nyní.

Dále chceme schopnost provádět nějakou akci. Za to přidáme a metoda do této třídy. Předpokládám, že chci, aby funkce zobrazovala celé jméno zaměstnance. Pojďme to tedy implementovat prakticky.

zaměstnanec třídy: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) emp_1 = zaměstnanec ('aayushi', 'johari', 350000) emp_2 = zaměstnanec ('test', 'test', 100000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

Výstup-

aayushi.johari@company.com test.test@company.com aayushijohari testtest

Jak vidíte výše, vytvořil jsem ve třídě metodu nazvanou „celé jméno“. Každá metoda uvnitř třídy pythonu tedy automaticky bere instanci jako první argument. V rámci této metody jsem napsal logiku pro tisk celého jména a vrácení namísto emp_1 křestního jména a příjmení. Dále jsem použil „já“, aby fungovalo ve všech případech. Proto je při každém tisku používáme a metoda .

Pokud jde o třídy Pythonu, existují proměnné, které jsou sdíleny mezi všemi instancemi třídy. Tito se nazývají jako proměnné třídy . Proměnné instance mohou být pro každou instanci jedinečné, například jména, e-mail, sal atd. Složité? Pochopme to na příkladu. Podle níže uvedeného kódu zjistíte roční nárůst platu.

zaměstnanec třídy: perc_raise = 1,05 def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) def apply_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = zaměstnanec ('aayushi', 'johari', 350000) emp_2 = zaměstnanec ('test', 'test', 100000) print (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

Výstup-

350000 367500

Jak vidíte výše, nejprve jsem vytiskl plat a poté použil zvýšení o 1,5%. Abychom mohli přistupovat k těmto proměnným třídy, musíme k nim přistupovat buď prostřednictvím třídy, nebo instance třídy. Pojďme nyní pochopit různé atributy ve třídě pythonu.

Atributy ve třídě Pythonu

Atributy v Pythonu definují vlastnost objektu, prvku nebo souboru. Existují dva typy atributů:

  • Integrované atributy třídy: Ve třídách Pythonu jsou přítomny různé předdefinované atributy. Například _dict_, _doc_, _name _ atd. Dovolte mi vzít stejný příklad, kde chci zobrazit všechny páry klíč – hodnota zaměstnance1. K tomu můžete jednoduše napsat následující příkaz, který obsahuje jmenný prostor třídy:

    tisk (emp_1 .__ dict__)

    Po jeho provedení získáte výstupy jako: {„fname“: „aayushi“, „lname“: „johari“, „sal“: 350000, „email“: „aayushi.johari@company.com“}

  • Atributy definované uživateli : Atributy jsou vytvořeny uvnitř definice třídy. Můžeme dynamicky vytvářet nové atributy pro existující instance třídy. Atributy lze také svázat s názvy tříd.

Dále máme veřejné, chráněné a soukromé atributy. Pojďme jim porozumět podrobně:

Pojmenování Typ Význam
názevVeřejnostTyto atributy lze volně používat uvnitř nebo vně definice třídy
_názevChráněnýChráněné atributy by se neměly používat mimo definici třídy, pokud nejsou uvnitř definice podtřídy
__názevSoukroméTento druh atributu je nepřístupný a neviditelný. Tyto atributy není možné číst ani zapisovat, kromě samotné definice třídy


Dále pochopíme nejdůležitější komponentu ve třídě pythonu, tj. Objekty.

Co jsou objekty ve třídě Pythonu?

Jak jsme diskutovali výše, objekt lze použít pro přístup k různým atributům. Používá se k vytvoření instance třídy. Instance je objekt třídy vytvořený za běhu.

To Rychlý přehled, objekt je v podstatě vše, co kolem vidíte. Například: Pes je předmětem třídy zvířat, já jsem předmětem třídy lidí. Podobně mohou existovat různé objekty stejné třídy telefonu.To je docela podobné volání funkce, o kterém jsme již hovořili. Pochopme to na příkladu:

třída MyClass: def func (self): print ('Hello') # vytvořit novou MyClass ob = MyClass () ob.func ()

Pokračujeme ve třídě pythonu, pojďme pochopit různé koncepty OOP.

Koncepty OOP

OOP odkazuje na objektově orientované programování v Pythonu. Python není zcela objektově orientovaný, protože obsahuje některé procedurální funkce. Nyní se musíte divit, jaký je rozdíl mezi procedurálním a objektově orientovaným programováním. Abychom vyjasnili vaše pochybnosti, v procedurálním programování je celý kód zapsán do jedné dlouhé procedury, i když může obsahovat funkce a podprogramy. Není to zvládnutelné, protože jak data, tak logika se mísí dohromady. Ale když mluvíme o objektově orientovaném programování, program je rozdělen na samostatné objekty nebo několik miniprogramů. Každý objekt představuje jinou část aplikace, která má svá vlastní data a logiku pro vzájemnou komunikaci. Například web obsahuje různé objekty, jako jsou obrázky, videa atd.
Objektově orientované programování zahrnuje koncept třídy Python, objektu, dědičnosti, polymorfismu, abstrakce atd. Pojďme se těmto tématům podrobně věnovat.

Třída Pythonu: Dědičnost

Dědičnost nám umožňuje zdědit atributy a metody ze základní / nadřazené třídy. To je užitečné, protože můžeme vytvářet podtřídy a získávat všechny funkce z naší nadřazené třídy. Pak můžeme přepsat a přidat nové funkce bez ovlivnění nadřazené třídy. Pojďme si na příkladu představit koncept nadřazené třídy a podřízené třídy.

Jak vidíme na obrázku, dítě dědí vlastnosti po otci. Podobně v pythonu existují dvě třídy:

1. Rodičovská třída (třída Super nebo Base)

2. Podřízená třída (podtřída nebo odvozená třída)

jak vytvořit třídu singleton

Třída, která zdědí vlastnosti, je známá jako Dítě Třída, zatímco třída, jejíž vlastnosti jsou zděděny, je známá jako Rodič třída.

Dědičnost se týká schopnosti tvořit Podtřídy které obsahují specializace jejich rodičů. Dále se dělí na čtyři typy, jmenovitě jednoduché, víceúrovňové, hierarchické a více dědičných. Pro lepší porozumění použijte níže uvedený obrázek.

Pojďme do třídy pythonu a pochopme, jak je dědičnost užitečná.

jak vytvořit dashboard v power bi

Řekněme, že chci vytvořit třídy pro typy zaměstnanců. Vytvořím „vývojáře“ a „manažery“ jako podtřídy, protože vývojáři i manažeři budou mít jméno, e-mail a plat a všechny tyto funkce budou ve třídě zaměstnanců. Takže místo kopírování kódu podtříd můžeme jednoduše znovu použít kód zděděním od zaměstnance.

zaměstnanec třídy: num_employee = 0 raise_amount = 1,04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' employee.num_employee + = 1 def celé jméno (self): návrat '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) vývojář třídy (zaměstnanec): předat emp_1 = vývojář ('aayushi', 'johari', 1000000) print (emp_1.email)
 Výstup - aayushi.johari@company.com

Jak vidíte ve výše uvedeném výstupu, všechny podrobnosti o třídě zaměstnanců jsou k dispozici ve třídě vývojářů.Co když chci změnit navýšení pro vývojáře na 10%? podívejme se, jak to lze prakticky provést.

zaměstnanec třídy: num_employee = 0 raise_amount = 1,04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' employee.num_employee + = 1 def celé jméno (self): návrat '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) vývojář třídy (zaměstnanec): raise_amount = 1,10 emp_1 = vývojář ('aayushi', 'johari', 10 000 000) print (emp_1.raise_amount)
 Výstup - 1.1

Jak vidíte, aktualizoval procentní nárůst platu ze 4% na 10%.Nyní, když chci přidat ještě jeden atribut, řekněme programovací jazyk v naší metodě init, ale v naší mateřské třídě neexistuje. Existuje pro to nějaké řešení? Ano! můžeme zkopírovat celou logiku zaměstnanců a udělat to, ale opět to zvětší velikost kódu. Abychom tomu předešli, zvažte následující kód:

zaměstnanec třídy: num_employee = 0 raise_amount = 1,04 def __init __ (self, first, last, sal): self.first = first self.last = last self.sal = sal self.email = first + '.' + last + '@ company.com' employee.num_employee + = 1 def celé jméno (self): návrat '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) vývojář třídy (zaměstnanec): raise_amount = 1,10 def __init __ (self, first, last, sal, prog_lang): super () .__ init __ (first, last, sal) self.prog_lang = prog_lang emp_1 = developer ( 'aayushi', 'johari', 1000000, 'python') print (emp_1.prog_lang)

Proto jsem s trochou kódu provedl změny. Použil jsem super .__ init __ (first, last, pay), který dědí vlastnosti ze základní třídy.Na závěr se dědičnost používá k opětovnému použití kódu a ke snížení složitosti programu.

Třída Pythonu: Polymorfismus

Polymorfismus v informatice je schopnost prezentovat stejné rozhraní pro různé základní formy. Z praktického hlediska polymorfismus znamená, že pokud třída B dědí ze třídy A, nemusí zdědit vše o třídě A, může dělat některé věci, které třída A dělá jinak. Nejčastěji se používá při řešení dědičnosti. Python je implicitně polymorfní, má schopnost přetížit standardní operátory, aby měli odpovídající chování na základě jejich kontextu.

Rozumíme příkladu:

třída Animal: def __init __ (self, name): self.name = name def talk (self): pass class Dog (Animal): def talk (self): print ('Woof') class Cat (Animal): def talk ( self): print ('MEOW!') c = Cat ('kitty') c.talk () d = Dog (Animal) d.talk ()

Výstup -

Mňoukat! Tkanina

Dále přejdeme k dalšímu objektově orientovanému konceptu programování, tj. Abstrakci.

Třída Pythonu: Abstrakce

Abstrakce se používá ke zjednodušení složité reality modelováním tříd vhodných pro daný problém. Zde máme abstraktní třídu, kterou nelze konkretizovat. To znamená, že pro tyto třídy nemůžete vytvářet objekty ani instance. Lze jej použít pouze k zdědění určitých funkcí, které nazýváte jako základní třída. Takže můžete zdědit funkce, ale zároveň nemůžete vytvořit instanci této konkrétní třídy. Pojďme pochopit koncept abstraktní třídy na příkladu níže:

from abc import ABC, abstractmethod class Employee (ABC): @abstractmethod def count_salary (self, sal): pass class Developer (Employee): def count_salary (self, sal): finalsalary = sal * 1.10 return finalsalary emp_1 = Developer () print (emp_1.calculate_salary (10 000))

Výstup-

11000.0

Jak vidíte ve výše uvedeném výstupu, zvýšili jsme základní plat na 10%, tj. Plat je nyní 11000. Nyní, pokud skutečně pokračujete a vytvoříte objekt třídy „Zaměstnanec“, vyhodí vás to jako python Nelze vám vytvořit objekt abstraktní třídy. Ale pomocí dědičnosti můžete vlastně zdědit vlastnosti a provést příslušné úkoly.

Takže, tohle bylo v kostce všechno o třídách a objektech pythonu. Pokryli jsme všechny základy třídy Python, objekty a různé objektově orientované koncepty v pythonu, takže nyní můžete začít cvičit. Doufám, že jste si tento blog na téma „Třída Pythonu“ užili a máte jasno v každém aspektu, o kterém jsem hovořil výše. Po třídě pythonu přijdu s dalšími blogy na Pythonu pro scikit learn library and array. Zůstaňte naladěni!

Máte na nás dotaz? Uveďte to prosím v sekci komentářů v tomto blogu „Třídy Python“ a my se vám ozveme co nejdříve.

Chcete-li získat podrobné znalosti Pythonu a jeho různých aplikací, můžete s naším živým online školením s nepřetržitou podporou a doživotním přístupem.