Ebben az oktatóanyagban megismerheti a Python többszörös öröklődését és annak használatát a programban. Megismeri a többszintű öröklődést és a módszer felbontási sorrendjét is.
Python többszörös öröklődés
Egy osztály a Pythonban egynél több alaposztályból származtatható, hasonlóan a C ++ -hoz. Ezt hívják többszörös öröklésnek.
Többszörös öröklés esetén az összes alaposztály jellemzői öröklődnek a származtatott osztályba. A többszörös öröklés szintaxisa hasonló az egyszeri örökléshez.
Példa
class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass
Itt a MultiDerived osztály a Base1 és a Base2 osztályokból származik.

A MultiDerived osztály örököl mind a Base1, mind a Base2 osztályból.
Python többszintű öröklés
Örökölhetünk származtatott osztályból is. Ezt többszintű öröklésnek nevezzük. Bármilyen mélységű lehet a Pythonban.
A többszintű öröklésben az alaposztály és a levezetett osztály jellemzői öröklődnek az új származtatott osztályba.
Az alábbiakban egy megfelelő vizualizációval ellátott példa található.
class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass
Itt a Derived1 osztály a Base osztályból, a Derived2 osztály pedig a Derived1 osztályból származik.

Metódus felbontási sorrend Pythonban
A Python minden osztálya az object
osztályból származik . Ez a legalapvetőbb típus a Pythonban.
Tehát technikailag az összes többi osztály, akár beépített, akár felhasználó által definiált, származtatott osztály, és az összes objektum az object
osztály példánya .
# Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance("Hello",object))
A többszörös öröklési forgatókönyvben bármely megadott attribútumot keresnek először az aktuális osztályban. Ha nem található, a keresés a szülő osztályokba folytatódik mélység-első, bal-jobb módon, anélkül, hogy kétszer keresné ugyanazon osztályt.
Tehát a fenti példában az MultiDerived
osztály a keresési sorrend ( MultiDerived
, Base1
, Base2
, object
). Ezt a sorrendet MultiDerived
osztály linearizálásának is nevezik, és a sorrend megtalálásához használt szabályhalmazot Method Resolution Order (MRO) .
Az MRO-nak meg kell akadályoznia a helyi rangsorolást, és monotonitást is biztosítania kell. Biztosítja, hogy egy osztály mindig megjelenjen a szülei előtt. Több szülő esetén a sorrend megegyezik az alaposztályok sorrendjével.
Egy osztály MRO-ja megtekinthető __mro__
attribútumként vagy mro()
módszerként. Az előbbi egy duplát ad vissza, míg az utóbbi egy listát.
>>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.mro() (, , , )
Itt van egy kicsit összetettebb többszörös öröklési példa és annak megjelenítése az MRO-val együtt.

# 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())
Kimenet
(,,,,,,)
Az MRO kiszámításának tényleges algoritmusának megismeréséhez látogasson el a Megbeszélés az MRO-ra c.