Úvod do dědičnosti v Pythonu
Python, který se může pochlubit schopnostmi více paradigmat, zjevně vyhovuje objektově orientovanému stylu programování. A žádný jazyk nemůže být dost směšný na to, aby si vyžádal objektově orientovanou metodiku, aniž by poskytoval podporu dědičnosti, včetně pythonu. Python poskytuje zřetelně jedinečnou chuť dědičnosti a umožňuje extrémně výkonné operace, které dříve nebyly vidět. Ačkoli to přichází s určitými omezeními, například v současné době je bezpečnost prostřednictvím rozsahu pro členy třídy dosaženo pouze konvencí a není neodmyslitelně součástí jazyka. Členové, kteří jsou prohlášeni za soukromí, jsou tedy s určitými úpravami veřejně přístupní.
Syntaxe třídy
Syntaxe definující odvozenou třídu, když má být zděděna jedna nebo více základních tříd, je následující:
class derivedClassName(baseClassName(, …)):
…
…
Jak je ukázáno, odvozená třída specifikuje seznam základních tříd oddělených čárkami, které mají zdědit v záhlaví definice třídy.
Třída kuchyně
Začněme definováním základní třídy používané pro všechny naše příklady:
class cuisine():
def __init__(self, type):
self.type = type
returncooked_cuisine = new cuisine('cooked')
Zobrazená základna definuje šablonu objektu používanou k definování kuchyní a zachycení, zda se jedná o vařenou kuchyni nebo ne. Má také konstruktéra, který používá typ kuchyně. Později se vytvoří objekt typu „vařený“.
Druhy dědičnosti v Pythonu
Existují hlavně dva typy dědičnosti, jejichž kombinace dává každý jiný typ.
1. Single dědičnost: Jedna základní třída, zděděná jednou odvozenou třídou. Toto je nejjednodušší typ dědičnosti. Také minimální možný. Odvozená třída automaticky vyvolá konstruktor základní třídy.
2. Vícenásobná dědičnost: Více základních tříd zděděných jednou odvozenou třídou. Konstruktory základní třídy jsou vyvolány v pořadí, ve kterém byly třídy odvozeny.
Odvozené typy dědičnosti
Kombinace výše uvedených dvou forem dědičnosti může vést k následujícím typům dědičnosti:
1. Hierarchická dědičnost: Jedna základní třída zděděná několika odvozenými třídami. Každá odvozená třída bude pracovat nezávisle, ale objekty sdílejí proměnné třídy v různých třídách.
2. Víceúrovňová dědičnost: Odvozená třída sloužící jako základní třída pro jinou odvozenou třídu. Konstruktory základní třídy jsou v tomto případě vyvolány rekurzivně.
3. Hybridní dědičnost: Kombinace více příkladů výše uvedených typů dědičnosti. To by mohlo vést k jakékoli představitelné kombinaci tříd.
Příklady dědičnosti v Pythonu
Níže jsou uvedeny příklady dědičnosti v Pythonu:
1. Jediné dědictví
Vytvořme třídu s názvem Indická kuchyně, která zdědí třídní kuchyni.
class indian_cuisine(cuisine):
def __init__(self, type, place):
super().__init__(type)
self.place = place
returnindian_cuisine = new cuisine('cooked', 'India')
Jak je ukázáno v nové třídě, byl vytvořen indian_cusine, který přijímá parametr type a vyvolává konstruktor základní třídy, předávající parametr. Navíc vytváří nové proměnné místo pro objekt . To se používá pouze v odvozené třídě a není viditelné pro objekty základní třídy.
2. Hierarchické dědictví
Vytvořme třídu nazvanou ItalianCuisine, která zdědí třídní kuchyni:
class italian_cuisine(cuisine):
def __init__(self, type, place):
super().__init__(type)
self.place = place
returnitalian_cuisine = new cuisine('cooked', 'Italy')
Jak je ukázáno v nové třídě, byl vytvořen italian_cusine, který přijímá parametr type a vyvolává konstruktor základní třídy, předávající parametr. Navíc vytváří nové proměnné místo pro objekt . To se používá pouze v odvozené třídě a není viditelné pro objekty základní třídy. Nyní, protože dvě třídy, indian_cusines a italian_cuisine zdědí třídu kuchyně, je implementována hierarchická dědičnost.
3. Vícenásobné dědictví
Vytvořme třídu nazvanou FineDineCuisine, která zdědí z několika tříd.
class fine_dine_cuisine(indian_cuisine, italian_cuisine):
def __init__(self, type, place, portion_size):
super().__init__(type, place)
self.portion_size = portion_size
returnfine_dine_cuisine = new cuisine('cooked', 'India', 4)
Nová třída fine_dine_cuisine, zdědí po indian_cuisine a italian_cuisine, zdědí jejich parametry. Přijímá typ parametru, místo a velikost_části. typ a místo jsou předávány jako argumenty pro konstruktéry základní třídy. part_size je nový parametr objektu nesdílený s základními třídami.
Poznámka k dědičnosti diamantu:
Nyní, protože indian_cuisine a italian_cuisine zdědí třídu kuchyně, tvoří klasický případ dědičnosti diamantů, kde pro odvozenou třídu je přímo / nepřímo přítomno více instancí základní třídy. Ve většině jazyků, například c ++, to způsobuje problém nebo se používají abstraktní třídy. Python naproti tomu uvádí své vlastní inovativní řešení. Zdědí běžné metody a atributy pouze jednou a dává přednost třídám v pořadí dědičnosti. Proto, protože zde je kuchyně zděděna dvakrát, dává přednost indiánské verzi kuchyně, protože je zděděna první.
Poznámka pro členy třídy:
Jakýkoli atribut definovaný v definici třídy, ale nikoli ve funkci, se stane atributem třídy a je sdílen ve všech instancích třídy. Pokud tedy jeden objekt změní některý z těchto atributů třídy, změny jsou viditelné pro všechny ostatní instance (ať už pro stejný objekt třídy nebo odvozený objekt třídy). Proto buďte opatrní při používání atributů třídy, které nejsou obsaženy v žádné definici metody.
Závěr - Dědičnost v Pythonu
Python znovu definoval velmi flexibilní, vstřícný a výkonný, když je preferovanou cestou objektově orientované paradigma. Je to určitě koncept, který může každý použít, a měl by mít pod sebou pás. Tyto koncepty se používají k vytvoření stavebních bloků jakéhokoli škálovatelného a udržovatelného softwaru.
S tímto základním úvodem k dědičnosti v pythonu můžete pokračovat a zacílit na problémová prohlášení v reálném světě a zjistit, jak dobře je design schopen vymyslet.
Doporučené články
Toto je průvodce po dědictví v Pythonu. Zde diskutujeme Úvod, Syntaxe a typy Dědičnosti v Pythonu spolu s různými příklady a implementací kódu. Můžete si také prohlédnout naše další doporučené články -
-
- Dědičnost v Javě
- Co je dědičnost v programování?
- Dědičnost v C #
- Převažující v Javě
- Dědičnost v PHP
- Deklarace abstraktní třídy v C # s příkladem