Python Multiple Dedovanje: Kaj je to in kako ga uporabiti?

V tej vadnici boste izvedeli več o dedovanju v Pythonu in kako ga uporabljati v svojem programu. Spoznali boste tudi večstopenjsko dedovanje in vrstni red ločljivosti metode.

Python večkratno dedovanje

Razred lahko izpeljemo iz več kot enega osnovnega razreda v Pythonu, podobno kot C ++. To se imenuje večkratno dedovanje.

Pri večkratnem dedovanju se lastnosti vseh osnovnih razredov podedujejo v izpeljani razred. Sintaksa za večkratno dedovanje je podobna dedovanju z enim samim.

Primer

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

Tu je razred MultiDerived izpeljan iz razredov Base1 in Base2.

Večkratno dedovanje v Pythonu

Razred MultiDerived podeduje oba razreda Base1 in Base2.

Dedovanje Python na več ravneh

Podedujemo lahko tudi iz izpeljanega razreda. To se imenuje večstopenjsko dedovanje. V Pythonu je lahko poljubne globine.

Pri večstopenjskem dedovanju se lastnosti osnovnega razreda in izpeljanega razreda podedujejo v novi izvedeni razred.

Primer z ustrezno vizualizacijo je podan spodaj.

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

Tu je razred Derived1 izpeljan iz razreda Base, razred Derived2 pa iz razreda Derived1.

Večstopenjsko dedovanje v Pythonu

Vrstni red ločljivosti metode v Pythonu

Vsak razred v Pythonu izhaja iz objectrazreda. To je najbolj osnovna vrsta v Pythonu.

Torej tehnično so vsi drugi razredi, bodisi vgrajeni bodisi uporabniško definirani, izpeljani razredi in vsi predmeti so primerki objectrazreda.

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

V scenariju večkratnega dedovanja se v trenutnem razredu najprej išče kateri koli določen atribut. Če ga ne najdete, se iskanje nadaljuje v nadrejene razrede po globini najprej, levo-desno, ne da bi dvakrat iskali isti razred.

Torej, v zgornjem primeru MultiDerivedrazreda je vrstni red iskanje ( MultiDerived, Base1, Base2, object). Ta vrstni red se imenuje tudi linearizacija MultiDerivedrazreda, nabor pravil, ki se uporablja za iskanje tega reda, pa Metod Resolution Order (MRO) .

MRO mora preprečiti lokalno urejanje prednosti in zagotoviti monotonost. Zagotavlja, da se razred vedno pojavi pred starši. Pri več starših je vrstni red enak kot nabor osnovnih razredov.

MRO razreda je mogoče obravnavati kot __mro__atribut ali mro()metodo. Prvi vrne korito, drugi pa seznam.

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

Tu je malo bolj zapleten primer večkratnega dedovanja in njegova vizualizacija skupaj z MRO.

Vizualizacija večkratne dediščine 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())

Izhod

 (,,,,,,)

Če želite vedeti dejanski algoritem, kako se izračuna MRO, obiščite razpravo o MRO.

Zanimive Članki...