Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

Python meerdere overerving

Python meervoudige overerving

In deze zelfstudie leer je over meervoudige overerving in Python en hoe je deze in je programma kunt gebruiken. U leert ook over overerving op meerdere niveaus en de volgorde van de methodeomzetting.

Python Multiple Inheritance

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 overgenomen 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, de MultiDerived klasse is afgeleid van Basis1 en Basis2 lessen.

De MultiDerived klasse erft van beide Basis1 en Basis2 lessen.


Python-overerving op meerdere niveaus

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 overgenomen 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, de Afgeleide1 klasse is afgeleid van de Base klasse, en de Derived2 klasse is afgeleid van de Derived1 klasse.


Methoderesolutievolgorde in Python

Elke klasse in Python is afgeleid van de object klas. Het is het meest basistype in Python.

Dus technisch gezien zijn alle andere klassen, 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 met meerdere overervingen wordt elk opgegeven kenmerk eerst doorzocht in de huidige klasse. Als het niet wordt gevonden, gaat het zoeken verder in de bovenliggende klassen in de diepte-eerst, links-rechts, zonder twee keer in dezelfde klasse te zoeken.

Dus, in het bovenstaande voorbeeld van MultiDerived class de zoekvolgorde is [MultiDerived , Base1 , Base2 , object ]. Deze volgorde wordt ook wel linearisatie van MultiDerived . genoemd klasse en de set regels die wordt gebruikt om deze volgorde te vinden, wordt Method Resolution Order (MRO) genoemd. .

MRO moet lokale prioriteitsvolgorde 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 bij tupels van basisklassen.

MRO van een klas kan worden gezien als de __mro__ attribuut of de mro() methode. De eerste retourneert een tuple, terwijl de laatste een lijst retourneert.

>>> MultiDerived.__mro__
(<class '__main__.MultiDerived'>,
 <class '__main__.Base1'>,
 <class '__main__.Base2'>,
 <class 'object'>)

>>> MultiDerived.mro()
[<class '__main__.MultiDerived'>,
 <class '__main__.Base1'>,
 <class '__main__.Base2'>,
 <class 'object'>]

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:
# [<class '__main__.M'>, <class '__main__.B'>,
#  <class '__main__.A'>, <class '__main__.X'>,
#  <class '__main__.Y'>, <class '__main__.Z'>,
#  <class 'object'>]

print(M.mro())

Uitvoer

[<class '__main__.M'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class '__main__.Z'>, <class 'object'>]

Ga naar Discussion on MRO om het daadwerkelijke algoritme te weten over hoe MRO wordt berekend.


Python

  1. C# Overerving
  2. Python-gegevenstypen
  3. Python-operators
  4. Python pass-instructie
  5. Python-woordenboek
  6. Aangepaste Python-uitzonderingen
  7. Objectgeoriënteerd programmeren in Python
  8. Python-overerving
  9. type() en isinstance() in Python met voorbeelden
  10. C# - Overerving
  11. Python - Objectgericht