Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Python

Héritage multiple Python

Héritage multiple Python

Dans ce didacticiel, vous découvrirez l'héritage multiple en Python et comment l'utiliser dans votre programme. Vous découvrirez également l'héritage à plusieurs niveaux et l'ordre de résolution des méthodes.

Héritage multiple Python

Une classe peut être dérivée de plusieurs classes de base en Python, comme en C++. C'est ce qu'on appelle l'héritage multiple.

Dans l'héritage multiple, les fonctionnalités de toutes les classes de base sont héritées dans la classe dérivée. La syntaxe de l'héritage multiple est similaire à celle de l'héritage unique.

Exemple

class Base1:
    pass

class Base2:
    pass

class MultiDerived(Base1, Base2):
    pass

Ici, le MultiDerived la classe est dérivée de Base1 et Base2 cours.

Le multidérivé la classe hérite des deux Base1 et Base2 cours.

Héritage multiniveau Python

On peut aussi hériter d'une classe dérivée. C'est ce qu'on appelle l'héritage multiniveau. Il peut être de n'importe quelle profondeur en Python.

Dans l'héritage multiniveau, les fonctionnalités de la classe de base et de la classe dérivée sont héritées dans la nouvelle classe dérivée.

Un exemple avec la visualisation correspondante est donné ci-dessous.

class Base:
    pass

class Derived1(Base):
    pass

class Derived2(Derived1):
    pass

Ici, le Derived1 la classe est dérivée de la Base classe, et la classe Derived2 la classe est dérivée de Derived1 classe.

Ordre de résolution des méthodes en Python

Chaque classe en Python est dérivée du object classer. C'est le type le plus basique de Python.

Donc, techniquement, toutes les autres classes, qu'elles soient intégrées ou définies par l'utilisateur, sont des classes dérivées et tous les objets sont des instances du object classe.

# Output: True
print(issubclass(list,object))

# Output: True
print(isinstance(5.5,object))

# Output: True
print(isinstance("Hello",object))

Dans le scénario d'héritage multiple, tout attribut spécifié est recherché en premier dans la classe actuelle. S'il n'est pas trouvé, la recherche se poursuit dans les classes parentes en profondeur d'abord, de gauche à droite sans rechercher deux fois la même classe.

Ainsi, dans l'exemple ci-dessus de MultiDerived classe l'ordre de recherche est [MultiDerived , Base1 , Base2 , object ]. Cet ordre est aussi appelé linéarisation de MultiDerived class et l'ensemble de règles utilisé pour trouver cette commande est appelé Method Resolution Order (MRO) .

Le MRO doit empêcher l'ordre de priorité local et également assurer la monotonie. Il garantit qu'une classe apparaît toujours avant ses parents. En cas de parents multiples, l'ordre est le même que pour les tuples des classes de base.

Le MRO d'une classe peut être considéré comme le __mro__ attribut ou le mro() méthode. Le premier renvoie un tuple tandis que le second renvoie une liste.

>>> 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'>]

Voici un exemple d'héritage multiple un peu plus complexe et sa visualisation avec le 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())

Sortie

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

Pour connaître l'algorithme réel sur la façon dont le MRO est calculé, visitez Discussion sur le MRO.


Python

  1. Types de données Python
  2. Opérateurs Python
  3. Instruction de passe Python
  4. Dictionnaire Python
  5. Exceptions personnalisées Python
  6. Programmation orientée objet Python
  7. Héritage Python
  8. type() et isinstance() en Python avec des exemples
  9. C# - Héritage