Ú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 -

    1. Dědičnost v Javě
    2. Co je dědičnost v programování?
    3. Dědičnost v C #
    4. Převažující v Javě
    5. Dědičnost v PHP
    6. Deklarace abstraktní třídy v C # s příkladem

Kategorie: