Python Multiple Inheritance: What is it and How to use?

V tomto kurzu se dozvíte o vícenásobné dědičnosti v Pythonu a o tom, jak ji používat ve vašem programu. Dozvíte se také o víceúrovňové dědičnosti a pořadí rozlišení metody.

Python Multiple Inheritance

Třídu lze v Pythonu odvodit z více než jedné základní třídy, podobně jako v C ++. Tomu se říká vícenásobné dědictví.

Ve vícenásobné dědičnosti se funkce všech základních tříd dědí do odvozené třídy. Syntaxe vícenásobné dědičnosti je podobná jednoduché dědičnosti.

Příklad

 class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass

Zde je třída MultiDerived odvozena od tříd Base1 a Base2.

Vícenásobná dědičnost v Pythonu

Třída MultiDerived dědí z tříd Base1 i Base2.

Víceúrovňová dědičnost Pythonu

Můžeme také dědit z odvozené třídy. Tomu se říká víceúrovňová dědičnost. V Pythonu to může být jakékoli hloubky.

Ve víceúrovňové dědičnosti se funkce základní třídy a odvozené třídy dědí do nové odvozené třídy.

Níže je uveden příklad s odpovídající vizualizací.

 class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass

Zde je třída Derived1 odvozena od třídy Base a třída Derived2 je odvozena od třídy Derived1.

Víceúrovňová dědičnost v Pythonu

Pořadí řešení metod v Pythonu

Každá třída v Pythonu je odvozena od objecttřídy. Je to nejzákladnější typ v Pythonu.

Technicky jsou tedy všechny ostatní třídy, ať už vestavěné nebo definované uživatelem, odvozenými třídami a všechny objekty jsou instancemi objecttřídy.

 # Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance("Hello",object))

Ve scénáři vícenásobného dědění se nejprve prohledá jakýkoli zadaný atribut v aktuální třídě. Pokud není nalezen, hledání pokračuje do nadřazených tříd hloubkově, zleva doprava bez hledání stejné třídy dvakrát.

Takže ve výše uvedeném příkladu MultiDerivedtřídy vyhledávací objednávka ( MultiDerived, Base1, Base2, object). Toto pořadí se také nazývá linearizace MultiDerivedtřídy a sada pravidel používaných k nalezení tohoto pořadí se nazývá Method Resolution Order (MRO) .

MRO musí zabránit uspořádání místních priorit a také zajistit monotónnost. Zajišťuje, aby se třída vždy objevila před rodiči. V případě více rodičů je pořadí stejné jako n-tice základních tříd.

MRO třídy lze zobrazit jako __mro__atribut nebo mro()metodu. První vrátí n-tici, zatímco druhá vrátí seznam.

 >>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.mro() (, , , )

Zde je trochu složitější příklad vícenásobné dědičnosti a jeho vizualizace spolu s MRO.

Vizualizace vícenásobné dědičnosti v Pythonu
 # Demonstration of MRO class X: pass class Y: pass class Z: pass class A(X, Y): pass class B(Y, Z): pass class M(B, A, Z): pass # Output: # (, , # , , # , , # ) print(M.mro())

Výstup

 (,,,,,,)

Chcete-li znát skutečný algoritmus výpočtu MRO, navštivte Diskuse o MRO.

Zajímavé články...