Python többszörös öröklés: Mi ez és hogyan kell használni?

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.

Többszörös öröklés a Pythonban

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.

Többszintű öröklés a Pythonban

Metódus felbontási sorrend Pythonban

A Python minden osztálya az objectosztá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 objectosztá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 MultiDerivedosztály a keresési sorrend ( MultiDerived, Base1, Base2, object). Ezt a sorrendet MultiDerivedosztá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.

Több öröklés megjelenítése a Pythonban
 # 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.

érdekes cikkek...