Úvod do dedičstva v Pythone

Python, ktorý sa môže pochváliť schopnosťami viacerých paradigiem, zjavne vyhovuje objektovo orientovanému štýlu programovania. A žiadny jazyk nemôže byť dosť smiešny na to, aby si mohol uplatniť objektovo orientovanú metodológiu bez toho, aby poskytoval podporu dedičstva vrátane pythonu. Python poskytuje zreteľne jedinečnú chuť dedičstva a umožňuje tak mimoriadne výkonné operácie, aké sme predtým nevideli. Aj keď to prichádza s určitými obmedzeniami, napríklad v súčasnosti sa bezpečnosť prostredníctvom rozsahu pre členov triedy dosahuje iba konvenciou a nie je neoddeliteľnou súčasťou jazyka. Členovia vyhlásení za súkromných sú teda skutočne verejne prístupní s určitými úpravami.

Syntax triedy

Syntax na definovanie odvodenej triedy, keď sa má zdediť jedna alebo viac základných tried, je takáto:

class derivedClassName(baseClassName(, …)):


Ako je znázornené, odvodená trieda určuje čiarkou oddelený zoznam základných tried, ktoré sa majú zdediť v hlavičke definície triedy.

Trieda Kuchyňa

Začnime definovaním základnej triedy používanej pre všetky naše príklady:

class cuisine():
def __init__(self, type):
self.type = type
returncooked_cuisine = new cuisine('cooked')

Zobrazená základňa definuje šablónu objektu, ktorá sa používa na definovanie kuchyne a na zachytenie, či ide o varenú kuchyňu alebo nie. Má tiež konštruktora, ktorý používa typ kuchyne. Neskôr sa vytvorí objekt typu „varené“.

Druhy dedičstva v Pythone

Existujú hlavne dva typy dedičstva, ktorých kombinácia dáva každý iný typ.

1. Jedno dedičstvo: Jedna základná trieda zdedená jednou odvodenou triedou. Toto je najjednoduchší typ dedičstva. Tiež čo najmenšie možné. Odvodená trieda automaticky vyvolá konštruktor základnej triedy.

2. Viacnásobné dedičstvo: Viacnásobné základné triedy zdedené jednou odvodenou triedou. Konštruktory základnej triedy sa vyvolávajú v poradí, v akom boli triedy odvodené.

Odvodené typy dedičstva

Kombinácia vyššie uvedených dvoch foriem dedičstva môže viesť k nasledujúcim typom dedičstva:

1. Hierarchické dedičstvo: Jedna základná trieda zdedená viacerými odvodenými triedami. Každá odvodená trieda bude pracovať nezávisle, ale objekty zdieľajú premenné triedy medzi rôznymi triedami.

2. Viacúrovňové dedičstvo: Odvodená trieda slúžiaca ako základná trieda pre inú odvodenú triedu. Konštruktéri základnej triedy sa v tomto prípade vyvolávajú rekurzívne.

3. Hybridné dedičstvo: Kombinácia viacerých príkladov vyššie uvedených druhov dedičstva. To by mohlo viesť k akejkoľvek predstaviteľnej kombinácii tried.

Príklady dedičstva v Pythone

Nižšie sú uvedené príklady dedičstva v Pythone:

1. Jediné dedičstvo

Vytvorme triedu s názvom Indická kuchyňa, ktorá zdedí triedu kuchyne.

class indian_cuisine(cuisine):
def __init__(self, type, place):
super().__init__(type)
self.place = place
returnindian_cuisine = new cuisine('cooked', 'India')

Ako je uvedené v novej triede, bol vytvorený indian_cusine, ktorý prijíma typ parametra a vyvoláva konštruktor základnej triedy, ktorý tento parameter odovzdáva. Okrem toho vytvára nové variabilné miesto pre objekt . Používa sa iba vo odvodenej triede a nie je viditeľný pre objekty základnej triedy.

2. Hierarchické dedičstvo

Vytvorme triedu s názvom ItalianCuisine, ktorá zdedí triednu kuchyňu:

class italian_cuisine(cuisine):
def __init__(self, type, place):
super().__init__(type)
self.place = place
returnitalian_cuisine = new cuisine('cooked', 'Italy')

Ako je ukázané v novej triede, bol vytvorený italian_cusine, ktorý prijíma typ parametra a vyvoláva konštruktor základnej triedy, ktorý tento parameter odovzdáva. Okrem toho vytvára nové variabilné miesto pre objekt . Používa sa iba vo odvodenej triede a nie je viditeľný pre objekty základnej triedy. Teraz, keďže dve triedy, indian_cusines a italian_cuisine zdedia triedu kuchyne, je implementovaná hierarchická dedičnosť.

3. Viacnásobné dedičstvo

Vytvorme triedu s názvom FineDineCuisine, ktorá zdedila z viacerých tried.

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á trieda fine_dine_cuisine zdedí po indian_cuisine a italian_cuisine a zdedí ich parametre. Prijíma typ parametrov, miesto a veľkosť časti. typ a miesto sa odovzdávajú ako argumenty pre konštruktory základnej triedy. part_size je nový parameter objektu, ktorý nie je zdieľaný so základnými triedami.

Poznámka k dedičstvu diamantu:

Teraz, keď indian_cuisine aj italian_cuisine dedí triedu kuchyne, predstavuje klasický prípad dedičnosti diamantov, kde pre odvodenú triedu je priamo alebo nepriamo prítomných viac príkladov základnej triedy. Vo väčšine jazykov, napríklad c ++, to spôsobuje problém alebo sa používajú abstraktné triedy. Na druhej strane Python uvádza svoje vlastné inovatívne riešenie. Dedí spoločné metódy a atribúty iba raz, pričom uprednostňuje triedy v poradí dedičnosti. Preto, keďže tu je kuchyňa zdedená dvakrát, uprednostňuje sa verzia indian_cuisine, pretože sa zdedila ako prvá.

Poznámka pre členov triedy:

Akýkoľvek atribút definovaný v definícii triedy, ale nie vo funkcii, sa stáva atribútom triedy a je zdieľaný vo všetkých inštanciách triedy. Ak teda jeden objekt zmení niektorý z týchto atribútov triedy, zmeny sú viditeľné pre všetky ostatné inštancie (či už pre rovnaký objekt triedy alebo odvodený objekt triedy). Preto buďte opatrní pri používaní atribútov triedy, ktoré nie sú obsiahnuté v definícii metódy.

Záver - Dedičstvo v Pythone

Python znovu definoval veľmi flexibilný, ústretový a výkonný nástroj, ktorý sa používa, keď je preferovanou cestou objektovo orientované paradigma. Je to určite koncept, ktorý môže každý použiť a mal by mať pod sebou opasok. Tieto koncepcie sa používajú na vytvorenie stavebných blokov akéhokoľvek škálovateľného a udržiavateľného softvéru.
S týmto základným úvodom do dedičstva v Pythone môžete pokračovať a zamerať sa na problémy v reálnom svete a vidieť, ako dobre si dokážete predstaviť.

Odporúčané články

Toto je sprievodca dedičstvom v Pythone. Tu diskutujeme Úvod, Syntax a typy Dedičnosti v Pythone spolu s rôznymi príkladmi a implementáciou kódu. Môžete si tiež prečítať naše ďalšie navrhované články -

    1. Dedičnosť v jazyku Java
    2. Čo je dedičstvo v programovaní?
    3. Dedičnosť v C #
    4. Prevláda v Jave
    5. Dedičnosť v PHP
    6. Deklarovanie abstraktnej triedy v C # s príkladom

Kategórie: