In deze zelfstudie leert u over meervoudige overerving in Python en hoe u deze in uw programma kunt gebruiken. U leert ook over overerving op meerdere niveaus en de volgorde van de methode-resolutie.
Python meervoudige overerving
Een klasse kan worden afgeleid uit meer dan één basisklasse in Python, vergelijkbaar met C ++. Dit wordt meervoudige overerving genoemd.
Bij meervoudige overerving worden de kenmerken van alle basisklassen overgeërfd in de afgeleide klasse. De syntaxis voor meervoudige overerving is vergelijkbaar met enkele overerving.
Voorbeeld
class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass
Hier is de klasse MultiDerived afgeleid van de klassen Base1 en Base2.

De klasse MultiDerived erft van zowel Base1- als Base2-klassen.
Overerving op meerdere niveaus van Python
We kunnen ook erven van een afgeleide klasse. Dit wordt overerving op meerdere niveaus genoemd. Het kan elke diepte hebben in Python.
Bij overerving op meerdere niveaus worden kenmerken van de basisklasse en de afgeleide klasse overgeërfd in de nieuwe afgeleide klasse.
Een voorbeeld met bijbehorende visualisatie wordt hieronder gegeven.
class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass
Hier wordt de klasse Derived1 afgeleid van de klasse Base en wordt de klasse Derived2 afgeleid van de klasse Derived1.

Method Resolution Order in Python
Elke klasse in Python is afgeleid van de object
klasse. Het is het meest basistype in Python.
Dus technisch gezien zijn alle andere klassen, ofwel ingebouwd of door de gebruiker gedefinieerd, afgeleide klassen en zijn alle objecten instanties van de object
klasse.
# Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance("Hello",object))
In het scenario voor meervoudige overerving wordt eerst elk opgegeven kenmerk in de huidige klasse doorzocht. Als dit niet het geval is, gaat het zoeken verder in de bovenliggende klassen in diepte-eerst, links-rechts, zonder dezelfde klasse twee keer te zoeken.
Dus, in het bovenstaande voorbeeld van MultiDerived
de klasse van de zoekvolgorde is ( MultiDerived
, Base1
, Base2
, object
). Deze volgorde wordt ook wel linearisatie van MultiDerived
klasse genoemd en de set regels die wordt gebruikt om deze volgorde te vinden, wordt Method Resolution Order (MRO) genoemd .
MRO moet lokale voorrangsordeningen voorkomen en ook zorgen voor eentonigheid. Het zorgt ervoor dat een klas altijd voor zijn ouders verschijnt. In het geval van meerdere ouders is de volgorde hetzelfde als tupels basisklassen.
MRO van een klasse kan worden gezien als het __mro__
attribuut of de mro()
methode. De eerste retourneert een tupel, terwijl de laatste een lijst retourneert.
>>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.mro() (, , , )
Hier is een iets complexer voorbeeld van meervoudige overerving en de visualisatie ervan samen met de MRO.

# 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())
Uitvoer
(`` `` ``)
Ga naar Discussie over MRO om het eigenlijke algoritme te kennen over hoe MRO wordt berekend.