Python Multiple Inheritance: wat is het en hoe te gebruiken?

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.

Meerdere overerving in Python

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.

Overerving op meerdere niveaus in Python

Method Resolution Order in Python

Elke klasse in Python is afgeleid van de objectklasse. 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 objectklasse.

 # 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 MultiDerivedde klasse van de zoekvolgorde is ( MultiDerived, Base1, Base2, object). Deze volgorde wordt ook wel linearisatie van MultiDerivedklasse 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.

Visualisatie van meervoudige overerving in Python
 # 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.

Interessante artikelen...