Triedy a objekty Pythonu - objektovo orientované programovanie



Tento blog o triede „Python Class“ sa zaoberá základmi triedy, atribútov a rôznych konceptov OOPS, ako sú dedičnosť, polymorfizmus a zapuzdrenie.

Potom, čo Stack Overflow predpovedal, že do roku 2019 Python predbehne ostatné jazyky, pokiaľ ide o aktívnych vývojárov, dopyt iba rastie.Python sa riadi paradigmou objektovo orientovaného programovania. Zaoberá sa deklarovaním tried pythonu, vytváraním objektov z nich a interakciou s používateľmi. V objektovo orientovanom jazyku je program rozdelený na samostatné objekty alebo môžete povedať do niekoľkých miniprogramov. Každý objekt predstavuje inú časť aplikácie, ktorá medzi sebou môže komunikovať.
V tomto blogu o triede v pythone pochopíte každý aspekt tried a objektov v nasledujúcom poradí:

Začnime.:-)





Čo je to trieda Python?

Trieda v pythone je plán, z ktorého sa vytvárajú konkrétne objekty. Umožňuje vám štruktúrovať softvér konkrétnym spôsobom. Tu prichádza otázka ako? Triedy nám umožňujú logicky zoskupiť naše údaje a fungovať spôsobom, ktorý je ľahko znovu použiteľný a spôsobom, na ktorom je možné v prípade potreby stavať. Zvážte nasledujúci obrázok.

python prevádza desatinné čísla na binárne

ClassesAndObjects - trieda Python - EdurekaNa prvom obrázku (A) predstavuje plán domu, za ktorý je možné považovať Trieda . S rovnakou koncepciou môžeme vytvoriť niekoľko domov a tie možno považovať za Predmety . Pomocou triedy môžete svojim programom pridať konzistenciu, aby sa dali používať čistejšie a efektívnejšie. Atribútmi sú dátové členy (premenné triedy a premenné inštancie) a metódy, ku ktorým sa pristupuje prostredníctvom bodkovej notácie.



  • Premenná triedy je premenná, ktorú zdieľajú všetky rôzne objekty / inštancie triedy.
  • Premenné inštancie sú premenné, ktoré sú pre každú inštanciu jedinečné. Je definovaná vo vnútri metódy a patrí iba k aktuálnej inštancii triedy.
  • Metódy sa tiež nazývajú ako funkcie, ktoré sú definované v triede a popisujú chovanie objektu.

Poďme teraz ďalej a pozrime sa, ako to funguje v PyCharme. Ak chcete začať, najskôr sa pozrite na syntax triedy python.

Syntax :

trieda Class_name: statement-1. . vyhlásenie-N

Tu sa zobrazuje „ trieda' príkaz vytvorí novú definíciu triedy. Názov triedy bezprostredne nasleduje za kľúčovým slovom „ trieda' v pythone, za ktorým nasleduje dvojbodka. Ak chcete vytvoriť triedu v pythone, zvážte nasledujúci príklad:



zamestnanec triedy: odovzdať #no atribútov a metód emp_1 = zamestnanec () emp_2 = zamestnanec () # premennú možno vytvoriť manuálne 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 print (emp_1.email) print (emp_2.email)

Výkon -

aayushi@edureka.co test@firma.com

Čo ak teraz nechceme tieto premenné nastavovať ručne. Uvidíte veľa kódu a tiež je náchylný na chyby. Aby to bolo automatické, môžeme použiť metódu „init“. Poďme si teda uvedomiť, čo presne sú metódy a atribúty v triede python.

Metódy a atribúty v triede Python

Teraz je vytváranie triedy neúplné bez niektorých funkcií. Funkcie je teda možné definovať nastavením rôznych atribútov, ktoré fungujú ako kontajner pre údaje a funkcie súvisiace s týmito atribútmi. Funkcie v pythone sa tiež nazývajú ako Metódy . Rozprávanie o init metóda , je to špeciálna funkcia, ktorá sa volá vždy, keď sa vytvorí nový objekt tejto triedy. Môžete to považovať za inicializačnú metódu alebo to môžete považovať za konštruktory, ak prichádzate z iného objektovo orientovaného programovacieho prostredia, ako je C ++, Java atď. Keď teraz nastavíme metódu v triede, dostanú inštanciu automaticky. Poďme do triedy pythonu a pomocou tejto metódy prijmime meno, priezvisko a plat.

zamestnanec triedy: def __init __ (self, first, last, sal): self.fname = first self.lname = last self.sal = sal self.email = first + '.' + posledný + '@ company.com' emp_1 = zamestnanec ('aayushi', 'johari', 350000) emp_2 = zamestnanec ('test', 'test', 100000) print (emp_1.email) print (emp_2.email)

Teraz sme v rámci našej metódy „init“ nastavili tieto inštančné premenné (self, first, last, sal). Self je inštancia, čo znamená, že kedykoľvek napíšeme self.fname = prvý, je to rovnaké ako emp_1.first = ‘aayushi‘. Potom sme vytvorili inštancie triedy zamestnancov, kde môžeme odovzdať hodnoty určené v metóde init. Táto metóda berie inštancie ako argumenty. Namiesto toho, aby ste to robili ručne, bude sa to robiť automaticky teraz.

Ďalej chceme schopnosť vykonať nejaký druh akcie. Za to pridáme a metóda do tejto triedy. Predpokladám, že chcem, aby funkcionalita zobrazovala celé meno zamestnanca. Implementujme to teda prakticky.

zamestnanec triedy: 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 = zamestnanec ('aayushi', 'johari', 350000) emp_2 = zamestnanec ('test', 'test', 100 000) print (emp_1.email) print (emp_2.email) print (emp_1.fullname ()) print (emp_2.fullname ())

Výkon-

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

Ako vidíte vyššie, v triede som vytvoril metódu nazvanú „celé meno“. Takže každá metóda vo vnútri triedy python automaticky berie inštanciu ako prvý argument. Teraz v rámci tejto metódy som napísal logiku na vytlačenie celého mena a vrátenie tohto namiesto emp_1 krstného mena a priezviska. Ďalej som použil „ja“, aby fungovalo vo všetkých prípadoch. Preto, aby sme to zakaždým vytlačili, používame a metóda .

Pokiaľ ide o triedy Pythonu, existujú premenné, ktoré sú zdieľané medzi všetky inštancie triedy. Tieto sa nazývajú ako premenné triedy . Premenné inštancie môžu byť pre každú inštanciu jedinečné, ako sú mená, e-mailové adresy, adresy atď. Poďme to pochopiť na príklade. Ak sa chcete dozvedieť viac o ročnom zvýšení platu, pozrite si kód uvedený nižšie.

zamestnanec triedy: 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 = zamestnanec ('aayushi', 'johari', 350000) emp_2 = zamestnanec ('test', 'test', 100000) print (emp_1.sal) emp_1.apply_raise () print (emp_1.sal)

Výkon-

350000 367500

Ako vidíte vyššie, najskôr som vytlačil plat a potom použil zvýšenie o 1,5%. Aby sme mohli pristupovať k týmto premenným triedy, musíme k nim buď pristupovať prostredníctvom triedy alebo inštancie triedy. Poďme si teraz predstaviť rôzne atribúty v triede python.

Atribúty v triede Python

Atribúty v Pythone definujú vlastnosť objektu, prvku alebo súboru. Existujú dva typy atribútov:

  • Zabudované atribúty triedy: Vo vnútri tried Pythonu sú rôzne zabudované atribúty. Napríklad _dict_, _doc_, _name _ atď. Vezmem si ten istý príklad, keď chcem zobraziť všetky páry kľúč - hodnota zamestnanca1. Za týmto účelom môžete jednoducho napísať nasledujúci príkaz, ktorý obsahuje menný priestor triedy:

    tlač (emp_1 .__ dict__)

    Po jeho vykonaní získate výstupy ako: {„fname“: „aayushi“, „lname“: „johari“, „sal“: 350000, „email“: „aayushi.johari@company.com“}

  • Atribúty definované používateľom : Atribúty sa vytvárajú v rámci definície triedy. Môžeme dynamicky vytvárať nové atribúty pre existujúce inštancie triedy. Atribúty môžu byť viazané aj na názvy tried.

Ďalej máme verejné, chránené a súkromné atribúty. Poďme im porozumieť podrobne:

Pomenovanie Typ Význam
názovVerejnéTieto atribúty môžu byť voľne použité vo vnútri alebo mimo definície triedy
_názovChránenéChránené atribúty by sa nemali používať mimo definíciu triedy, pokiaľ nie sú v definícii podtriedy
__názovSúkromnéTento druh atribútu je neprístupný a neviditeľný. Tieto atribúty nie je možné čítať ani zapisovať, okrem samotnej definície triedy


Ďalej si rozumieme najdôležitejšiu súčasť triedy python, teda objekty.

Čo sú objekty v triede Python?

Ako sme už diskutovali vyššie, objekt je možné použiť na prístup k rôznym atribútom. Používa sa na vytvorenie inštancie triedy. Inštancia je objektom triedy vytvorenej za behu programu.

To poskytnú vám rýchly prehľad, objekt je v podstate všetko, čo vidíte okolo. Napríklad: Pes je predmetom triedy zvierat, ja som predmetom triedy ľudí. Podobne môžu existovať rôzne objekty pre rovnakú triedu telefónov.Je to dosť podobné funkčnému volaniu, o ktorom sme už hovorili. Poďme to pochopiť na príklade:

class MyClass: def func (self): print ('Hello') # create a new MyClass ob = MyClass () ob.func ()

Ak pôjdeme ďalej v triede pythonu, pozrime sa na rôzne koncepty OOP.

Koncepty OOP

OOP sa týka objektovo orientovaného programovania v Pythone. Python nie je úplne objektovo orientovaný, pretože obsahuje niektoré procedurálne funkcie. Teraz vás určite zaujíma, aký je rozdiel medzi procedurálnym a objektovo orientovaným programovaním. Aby ste odstránili svoje pochybnosti, v procedurálnom programovaní je celý kód zapísaný do jednej dlhej procedúry, aj keď môže obsahovať funkcie a podprogramy. Nie je to zvládnuteľné, pretože dochádza k zmiešaniu údajov aj logiky. Ale keď hovoríme o objektovo orientovanom programovaní, program sa rozdelí na samostatné objekty alebo niekoľko miniprogramov. Každý objekt predstavuje inú časť aplikácie, ktorá má svoje vlastné údaje a logiku vzájomnej komunikácie. Napríklad webová stránka obsahuje rôzne objekty, ako sú obrázky, videá atď.
Objektovo orientované programovanie zahŕňa koncept triedy Python, objektu, dedičnosti, polymorfizmu, abstrakcie atď. Poďme sa týmto témam podrobne venovať.

Trieda Pythonu: Dedičnosť

Dedičnosť nám umožňuje dediť atribúty a metódy od základnej / nadradenej triedy. Je to užitočné, pretože môžeme vytvárať podtriedy a získať všetky funkcie z našej nadradenej triedy. Potom môžeme prepísať a pridať nové funkcie bez toho, aby to malo vplyv na nadradenú triedu. Poďme si na príklade predstaviť pojem rodičovská trieda a podradená trieda.

Ako vidíme na obrázku, dieťa dedí vlastnosti po otcovi. Podobne v pythone existujú dve triedy:

1. Rodičovská trieda (trieda Super alebo Base)

2. Detská trieda (podtrieda alebo odvodená trieda)

program na výber výberu v jave

Trieda, ktorá dedí vlastnosti, je známa ako Dieťa Trieda, zatiaľ čo trieda, ktorej vlastnosti sú zdedené, je známa ako Rodič trieda.

Dedenie sa týka schopnosti tvoriť Podtriedy ktoré obsahujú špecializácie ich rodičov. Ďalej sa delí na štyri typy, a to jedno, viacúrovňové, hierarchické a viacnásobné dedičstvo. Pre lepšie pochopenie použite nasledujúci obrázok.

Poďme do triedy pythonu a pochopme, ako je dedičstvo užitočné.

ako spustiť php na Windows 10

Povedzme, že chcem vytvoriť triedy pre typy zamestnancov. Budem vytvárať „vývojárov“ a „manažérov“ ako podtriedy, pretože vývojári aj manažéri budú mať meno, e-mail a plat a všetky tieto funkcie budú v triede zamestnancov. Namiesto kopírovania kódu pre podtriedy teda môžeme jednoducho znova použiť kód tak, že ho zdedíme po zamestnancovi.

zamestnanec triedy: 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é meno (self): návrat '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) vývojár triedy (zamestnanec): pass emp_1 = developer ('aayushi', 'johari', 10 000 000) print (emp_1.email)
 Výkon - aayushi.johari@firma.com

Ako vidíte vo vyššie uvedenom výstupe, všetky podrobnosti o triede zamestnancov sú k dispozícii v triede vývojárov.Čo teraz, keď chcem zmeniť zvýšenie sumy pre vývojára na 10%? pozrime sa, ako sa to dá prakticky.

zamestnanec triedy: 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é meno (self): návrat '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) vývojár triedy (zamestnanec): raise_amount = 1,10 emp_1 = vývojár ('aayushi', 'johari', 10 000 000) print (emp_1.raise_amount)
 Výkon - 1.1

Ako vidíte, aktualizoval sa percentuálny nárast platov zo 4% na 10%.Teraz, ak chcem pridať ešte jeden atribút, povedzme programovací jazyk v našej metóde init, ale v našej nadradenej triede neexistuje. Existuje na to nejaké riešenie? Áno! môžeme skopírovať celú logiku zamestnancov a urobiť to, ale opäť to zvýši veľkosť kódu. Aby sme sa tomu vyhli, zvážme nasledujúci kód:

zamestnanec triedy: 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é meno (self): návrat '{} {}'. format (self.first, self.last) def apply_raise (self): self.sal = int ( self.sal * raise_amount) vývojár triedy (zamestnanec): 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', 10 000 000, 'python') print (emp_1.prog_lang)

Preto som s trochou kódu urobil zmeny. Použil som super .__ init __ (first, last, pay), ktoré dedí vlastnosti zo základnej triedy.Záverom možno povedať, že dedičstvo sa používa na opätovné použitie kódu a na zníženie zložitosti programu.

Trieda Python: Polymorfizmus

Polymorfizmus v informatike je schopnosť predstaviť rovnaké rozhranie pre rôzne základné formy. Z praktického hľadiska polymorfizmus znamená, že ak trieda B dedí z triedy A, nemusí dediť všetko o triede A, môže robiť niektoré z vecí, ktoré trieda A robí inak. Najčastejšie sa používa pri riešení dedičstva. Python je implicitne polymorfný, má schopnosť preťažovať štandardné operátory tak, aby mali vhodné správanie na základe ich kontextu.

Poďme to pochopiť na príklade:

trieda Zviera: def __init __ (self, meno): self.name = meno def talk (self): prejsť triedou Dog (Animal): def talk (self): print ('Woof') trieda Cat (Animal): def talk ( self): print ('MEOW!') c = Cat ('kitty') c.talk () d = Dog (Animal) d.talk ()

Výkon -

Mňau! Haf

Ďalej prejdime k ďalšiemu objektovo orientovanému konceptu programovania, tj. Abstrakcii.

Trieda Pythonu: Abstrakcia

Abstrakcia sa používa na zjednodušenie zložitej reality modelovaním tried vhodných pre daný problém. Máme abstraktnú triedu, ktorú nie je možné vytvoriť. To znamená, že pre tieto triedy nemôžete vytvárať objekty ani inštancie. Môže sa použiť iba na zdedenie určitých funkcií, ktoré nazývate ako základná trieda. Môžete teda dediť funkcie, ale zároveň nemôžete vytvoriť inštanciu tejto konkrétnej triedy. Poďme pochopiť koncept abstraktnej triedy na príklade nižšie:

z abc import ABC, abstraktná metóda triedy Zamestnanec (ABC): @ abstraktná metóda def Calc_Salary (ja, sal): prejsť triedou Developer (zamestnanec): def Calc__Salary (ja, sal): finalsalary = sal * 1,10 vrátiť finalsalary emp_1 = Developer () tlačiť (emp_1.calculate_salary (10 000))

Výkon-

11000.0

Ako vidíte na výstupe vyššie, zvýšili sme základný plat na 10%, tj. Plat je teraz 11000. Teraz, ak skutočne pokračujete a urobíte objekt triedy „Zamestnanec“, spôsobí vám to chybu, pretože python to nerobí neumožňujú vám vytvoriť objekt abstraktnej triedy. Ale pomocou dedenia môžete skutočne dediť vlastnosti a vykonávať príslušné úlohy.

Takže chlapci, toto bolo v skratke všetko o triedach a objektoch pythonu. Prebrali sme všetky základy triedy Python, objekty a rôzne objektovo orientované koncepty v pythone, takže teraz môžete začať cvičiť. Dúfam, že ste si tento blog radi prečítali na tému „Python Class“, a máte jasno vo všetkých aspektoch, o ktorých som hovoril vyššie. Po hodine pythonu prídem s ďalšími blogmi o jazyku Python pre scikit learn library a array. Zostaňte naladení!

Máte na nás otázku? Uveďte to, prosím, v sekcii komentárov tohto blogu „Trieda Python“ a my sa vám ozveme čo najskôr.

Ak chcete získať podrobné informácie o Pythone a jeho rôznych aplikáciách, môžete s našim živým online školením s nepretržitou podporou a doživotným prístupom.