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 multiple inheritance, multilevel inheritance en Method Resolution Order (MRO)

Python Multiple Inheritance

Python staat toe dat een klasse erft van meer dan één basisklasse, net als C++. Deze feature heet multiple inheritance en laat een afgeleide klasse gedrag combineren van verschillende parent-klassen.

De syntax spiegelt single inheritance: je lijst alle parent-klassen tussen haakjes, gescheiden door komma's.

Voorbeeld

class Basis1: pass
class Basis2: pass
class MultiAfgeleide(Basis1, Basis2): pass

In dit voorbeeld erft MultiAfgeleide attributen en methoden van zowel Basis1 als Basis2.

Python multiple inheritance, multilevel inheritance en Method Resolution Order (MRO)

Diagram: MultiAfgeleide ontvangt features van Basis1 en Basis2.


Python Multilevel Inheritance

Naast twee niveaus kun je erfelijkheid koppelen: een klasse erft van een afgeleide klasse, wat een multilevel inheritance-hiërarchie creëert. Python ondersteunt elke diepte.

Elke nieuwe afgeleide klasse erft van zijn directe ouder, terwijl ook de voorouders attributen meegenomen worden.

Voorbeeld:

class Basis: pass
class Afgeleide1(Basis): pass
class Afgeleide2(Afgeleide1): pass

Hier breidt Afgeleide1 Basis uit, en Afgeleide2 breidt Afgeleide1 verder uit, vormend een drieniveauketen.

Python multiple inheritance, multilevel inheritance en Method Resolution Order (MRO)

Method Resolution Order (MRO) in Python

Elke Python-klasse erft uiteindelijk van object, de universele basistype. Daarom zijn alle objecten instanties van object, of ze nu built-in of user-defined zijn:

# Uitvoer: True
print(issubclass(list,object))
# Uitvoer: True
print(isinstance(5.5,object))
# Uitvoer: True
print(isinstance("Hallo",object))

Bij multiple inheritance lost Python attributen op met een depth-first, left-to-right traversal, zonder een klasse tweemaal te bezoeken. Deze traversal-volgorde heet de Method Resolution Order (MRO) en garandeert dat een klasse voor zijn ouders verschijnt.

De MRO voor MultiAfgeleide is: [MultiAfgeleide, Basis1, Basis2, object]. Je kunt het bekijken via het __mro__-attribuut of de mro()-methode:

MultiAfgeleide.__mro__
# (<class '__main__.MultiAfgeleide'>, <class '__main__.Basis1'>, <class '__main__.Basis2'>, <class 'object'>)
MultiAfgeleide.mro()
# [<class '__main__.MultiAfgeleide'>, <class '__main__.Basis1'>, <class '__main__.Basis2'>, <class 'object'>]

Complexe erfelijkheidsgraven volgen hetzelfde principe. Overweeg dit voorbeeld:

Python multiple inheritance, multilevel inheritance en Method Resolution Order (MRO)
# Demonstratie van 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
print(M.mro())
# Uitvoer:
# [<class '__main__.M'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class '__main__.Z'>, <class 'object'>]

Om dieper in te gaan op het algoritme dat MRO berekent, raadpleeg de officiële Python-documentatie over klasse-erfelijkheid en de discussie over MRO.

Python

  1. C# Inheritance: Concepten, Types en Praktische Code
  2. C# Erfelijkheid Beheersen: Herbruikbare, Onderhoudbare Code Bouwen
  3. Python Datatypes onder de knie krijgen: Een praktische gids
  4. Python Operators onder de knie krijgen: Een uitgebreide gids
  5. Python Pass Statement onder de knie krijgen: Een praktische gids
  6. Python-dictionaries beheersen: aanmaken, manipuleren en geavanceerde technieken
  7. Python-custom exceptions: een praktische gids
  8. Python Object-Oriented Programming beheersen: classes, inheritance, encapsulatie & polymorfisme
  9. Python-erfelijkheid beheersen: concepten, syntax en praktische voorbeelden
  10. type() en isinstance() in Python begrijpen: praktische voorbeelden
  11. Python Object-Georiënteerd Programmeren meesteren: Een uitgebreide gids