Objektovo orientované programovanie (OOP) je forma programovania sústredená okolo objektov: malých jednotiek, ktoré kombinujú dáta a kód. Simula bol prvý OOP jazyk vytvorený na simuláciu fyzikálnych modelov. Pomocou OOP môžete definovať triedy, ktoré fungujú ako šablóny pre objekty špecifických typov.
Základnými prvkami OOP sú triedy, objekty, metódy a atribúty. OOP používa tieto prvky na dosiahnutie základných cieľov: zapuzdrenie, abstrakcia, dedičnosť a polymorfizmus.
Python má vynikajúcu podporu pre objektovo orientované programovanie. Ak vás zaujíma OOP alebo ako ho používať v Pythone, prečítajte si podrobnosti.
Čo je objektovo orientované programovanie v Pythone?
Python je univerzálny programovací jazyk, ktorý podporuje objektovo orientované programovanie. Jeho centrálna infraštruktúra sa zameriava na aplikácie alebo navrhovanie objektov a tried. Používanie OOP robí kód Pythonu čistejším a prehľadnejším. Poskytuje tiež jednoduchšiu údržbu a opätovné použitie kódu.
Tu je príklad, ktorý vám ukáže, prečo používať OOP v Pythone.
jeans = [30, true, "Denim", 59]
V tomto príklade džínsy obsahujú zoznam hodnôt reprezentujúcich cenu, či je položka v predaji, jej materiál a náklady. Toto je non-OOP prístup a spôsobuje určité problémy. Neexistuje napríklad vysvetlenie, že džínsy[0] označujú veľkosť. Toto je veľmi neintuitívne v porovnaní s prístupom OOP, ktorý by odkazoval na pomenované pole: jeans.size .
Tento príklad kódu nie je príliš opakovane použiteľný, pretože správanie, na ktoré sa spolieha, nie je možné zistiť. Pomocou OOP môžete vytvoriť triedu, aby ste sa vyhli tomuto problému.
Súvisiace: Objektovo-orientované programovanie vs. procedurálne programovanie: Čím sa líšia?
Ako definovať triedu v Pythone
Ak chcete vytvoriť triedu v Pythone, použite kľúčové slovo „class“ nasledované zvoleným názvom. Tu je príklad definície triedy s názvom Myclass .
class MyClass: x = 2 p1 = MyClass() print(p1.x)
Definujme triedu, Pant , ktorá bude reprezentovať rôzne typy nohavíc. Táto trieda bude obsahovať veľkosť, stav predaja, materiál a cenu. V predvolenom nastavení tieto hodnoty inicializuje na Žiadne.
class Pant: # Define the properties and assign None value size = None onsale = None material = None price = None
Súvisiace: Abstraktné triedy v Pythone: Príručka pre začiatočníkov
Ako vytvoriť objekt v Pythone
Teraz poďme inicializovať objekt z triedy Pant. Najprv si zadefinujeme metódu inicializátora, ktorá má preddefinovaný názov _init_ . Keď ju definujete, Python automaticky zavolá túto metódu vždy, keď vytvoríte objekt z tejto triedy.
Po druhé, konkrétny self parameter umožní metóde inicializácie vybrať nový objekt.
Nakoniec, po definovaní inicializátora, vytvoríme objekt s názvom džínsy pomocou syntaxe [objectName] = Pant() .
class Pant: # Define the initializer method def __init__(self, size, onsale, material, price): self.size = size self.onsale = onsale self.material = material self.price = price # Create an object of the Pant class and set each property to an appropriate value jeans = Pant(11, False, "Denim", 81)
Na definovanie vlastností a správania použite atribúty a metódy
Objekty v Pythone môžu používať dva rôzne typy atribútov: atribúty triedy a atribúty inštancie.
Atribúty triedy sú premenné alebo metódy, ktoré zdieľajú všetky objekty danej triedy. Naproti tomu atribúty inštancie sú premenné, ktoré sú jedinečné pre každý objekt – inštanciu triedy.
Poďme vytvoriť metódu inštancie na interakciu s vlastnosťami objektu.
class Pant: # Define the initializer method def __init__(self, size, onsale, material, price): self.size = size self.onsale = onsale self.material = material self.price = price # Instance method def printinfo (self): return f"This pair of pants is size {self.size}, made of {self.material}, and costs {self.price}" # Instance method def putonsale (self): self.onsale = True jeans = Pant(11, False, "Denim", 81) print(jeans.printinfo()) jeans.putonsale() print(jeans.onsale)
Tu prvá metóda, printinfo() , používa všetky vlastnosti okrem onsale . Druhá metóda, putonsale() , nastavuje hodnotu vlastnosti onsale . Všimnite si, ako obe tieto metódy používajú kľúčové slovo self . Toto sa vzťahuje na konkrétny objekt (alebo inštanciu), ktorý sa používa na vyvolanie metódy.
Keď voláme putonsale() , táto metóda používa parameter self na zmenu hodnoty konkrétneho objektu. Ak by ste vytvorili ďalšiu inštanciu Pant — napríklad legíny — toto volanie by to neovplyvnilo. Vlastnosť inštancie jedného objektu je nezávislá od ostatných.
Ako používať dedičnosť v Pythone
Vyššie uvedený príklad môžete rozšíriť pridaním podkategórie triedy Nohavice . V objektovo orientovanom programovaní je to známe ako dedičnosť. Rozšírenie triedy bude definovať ďalšie vlastnosti alebo metódy, ktoré nie sú v rodičovskej triede.
Definujme Legíny ako podtriedu a zdedíme ju od Pant .
# Leggings is the child class to parent class Pant class Leggings(Pant): def __init__(self, size, onsale, material, price, elasticity): # Inherit self, size, onsale, material, and price properties Pant.__init__(self, size, onsale, material, price) # Expand leggings to contain extra property, elasticity self.elasticity = elasticity # Override printinfo to reference "pair of leggings" rather than "pants" def printinfo(self): return f"This pair of leggings is size {self.size}, made of {self.material}, and costs {self.price}" leggings = Leggings(11, False, "Leather", 42, True) print(leggings.printinfo())
Nová metóda inicializátora má všetky rovnaké vlastnosti ako trieda Pant a pridáva jedinečnú vlastnosť pružnosti. Triedu môžete rozšíriť, aby ste opätovne použili existujúcu funkčnosť a skrátili dĺžku kódu. Ak vaša trieda Legíny nededila z triedy Pant, budete musieť reprodukovať existujúci kód, len pre malú zmenu. Tieto výhody si viac všimnete, keď budete pracovať s väčšími a komplikovanejšími triedami.
Skontrolujte, či objekt dedí z triedy s isinstance()
Funkcia isinstance() kontroluje, či je objekt inštanciou špecifickej triedy alebo niektorej z tried jej predkov. Ak je objekt daného typu alebo typu, ktorý z neho dedí, funkcia vráti hodnotu True. V opačnom prípade vráti hodnotu False.
# Dummy base class class Pant: None # Dummy subclass that inherits from Pant class Leggings(Pant): None pants = Pant() leggings = Leggings() print(isinstance(leggings, Pant)) print(isinstance(pants, Leggings))
Všimnite si, že Python berie do úvahy objekt legín typu Leggings, inštanciu triedy Pant, rodičovskej triedy legín. Ale objekt nohavíc nie je inštanciou triedy Legíny.
Súvisiace články: Ako skontrolovať, či súbor existuje pomocou Pythonu
Python je dokonalý úvod do OOP
Python si získal popularitu vďaka svojej jednoduchej a ľahko zrozumiteľnej syntaxi v porovnaní s inými programovacími jazykmi. Jazyk bol navrhnutý na základe objektovo orientovaného programovania, takže je to skvelý nástroj na osvojenie si paradigmy. Väčšina veľkých technologických spoločností využíva Python v určitom bode svojho technologického zásobníka a vyhliadky pre programátorov Pythonu vyzerajú dobre.
Ak sa tešíte na kariéru vo vývojovom sektore, potom je Python skvelým miestom, kde začať. Uistite sa, že dobre rozumiete základným princípom – objektovo orientované programovanie je len začiatok!