Maison  >  Article  >  développement back-end  >  Comment implémenter l'héritage multiple en python

Comment implémenter l'héritage multiple en python

zbt
zbtoriginal
2023-12-11 14:04:33989parcourir

En Python, l'héritage multiple peut être implémenté en définissant une classe en utilisant plusieurs classes parents séparées par des virgules. Introduction détaillée : lorsqu'une classe hérite de plusieurs classes parentes, elle hérite des propriétés et méthodes de toutes les classes parentes. Cela signifie que les sous-classes peuvent accéder et utiliser les propriétés et méthodes définies dans la classe parent.

Comment implémenter l'héritage multiple en python

Le système d'exploitation de ce tutoriel : système Windows 10, Python version 3.11.4, ordinateur DELL G3.

L'héritage multiple est un mécanisme d'implémentation de relations entre classes en Python, permettant à une classe d'hériter des propriétés et des méthodes de plusieurs classes parents. En Python, l'héritage multiple peut être implémenté en définissant une classe avec plusieurs classes parentes séparées par des virgules. L'héritage multiple peut améliorer la réutilisabilité et la flexibilité du code dans une certaine mesure, mais vous devez également prêter attention à certains problèmes potentiels, tels que l'ordre de résolution des méthodes et les problèmes d'héritage des diamants.

La syntaxe de base pour implémenter l'héritage multiple en Python est la suivante :

class Child(Parent1, Parent2, ...):
# 子类的定义

Dans le code ci-dessus, Child est le nom de la sous-classe, Parent1, Parent2, etc. sont les noms des classes parentes, et plusieurs classes parentes sont séparés par des virgules.

Ensuite, je présenterai en détail plusieurs aspects de l'héritage multiple :

1. Hériter des attributs et des méthodes de plusieurs classes parent

Lorsqu'une classe hérite de plusieurs classes parent, elle héritera des propriétés de toutes les classes parent. Propriétés et les méthodes. Cela signifie que les sous-classes peuvent accéder et utiliser les propriétés et méthodes définies dans la classe parent.

Par exemple, supposons que nous ayons deux classes parents Parent1 et Parent2, qui définissent respectivement certaines propriétés et méthodes. Nous pouvons créer une sous-classe Child, hérite des propriétés et des méthodes de ces deux classes parentes, comme indiqué ci-dessous :

class Parent1:
def method1(self):
print("Parent1 method1")
class Parent2:
def method2(self):
print("Parent2 method2")
class Child(Parent1, Parent2):
pass

Dans le code ci-dessus, la classe `Child` hérite des deux classes parent `Parent1` et `Parent2`. Par conséquent, la classe `Child` peut appeler la classe `Parent1` Méthode `method1()` et méthode `Method2()` de `Parent2`.

child = Child()
child.method1() # 输出: Parent1 method1
child.method2() # 输出: Parent2 method2
通过创建 `Child` 类的实例 `child`,我们可以调用继承的方法。

2. Ordre de résolution des méthodes (MRO)

Dans l'héritage multiple, s'il existe des attributs ou des méthodes portant le même nom dans plusieurs classes parentes, Python recherchera les définitions de méthodes dans un ordre spécifique. Cet ordre est appelé ordre de résolution des méthodes (Méthode Ordonnance de résolution (MRO).

MRO détermine l'ordre de recherche des méthodes dans les classes multi-héritées. Dans la version Python 2.x, l'ordre de MRO est calculé via une recherche en profondeur d'abord (DFS) et une approche gauche d'abord. Et en Python Dans la version 3.x, l'algorithme de linéarisation C3 est utilisé par défaut pour calculer le MRO.

Vous pouvez afficher l'ordre de résolution des méthodes en appelant la méthode mro() de la classe. Dans l’ordre de résolution des méthodes, la classe parent de chaque classe est répertoriée avant elle, en conservant l’ordre d’origine.

Par exemple, considérons l'exemple suivant :

class Parent1:
def method(self):
print("Parent1 method")
class Parent2:
def method(self):
print("Parent2 method")
class Child(Parent1, Parent2):
pass
print(Child.mro()) # 输出: [, , , ]

Dans l'exemple ci-dessus, la classe `Child` hérite des méthodes `method` des deux classes parents `Parent1` et `Parent2`. Puisque `Parent1` est dans `Parent2` devant, donc lors de l'appel de `child.method()`, la méthode de la classe `Parent1` est en fait appelée.

Notez qu'en héritage multiple, le calcul du MRO est basé sur l'ordre d'héritage des classes. Si vous modifiez l'ordre de la classe parent, la priorité lors de l'appel de propriétés ou de méthodes portant le même nom changera également.

3. Problème d'héritage de diamant

Un héritage multiple peut causer un problème, à savoir l'héritage de diamant Problème). Le problème d'héritage du diamant se produit lorsqu'une sous-classe hérite de deux classes parentes et que les deux classes parentes héritent de la même classe parente.

Considérez l'exemple suivant :

class Grandparent:
def method(self):
print("Grandparent method")
class Parent1(Grandparent):
def method(self):
print("Parent1 method")
class Parent2(Grandparent):
def method(self):
print("Parent2 method")
class Child(Parent1, Parent2):
pass
child = Child()
child.method() # 输出: Parent1 method

Dans l'exemple ci-dessus, `Grandparent` est la classe parent de niveau supérieur et `Parent1` et `Parent2` héritent « Grand-parent ». Ensuite, la classe `Child` hérite de `Parent1` et `Parent2`, et les deux classes parent ont une méthode nommée `method` méthode.

Lors de l'appel de `child.method()`, ce qui est en réalité appelé est la `method` dans la classe `Parent1` méthode. En effet, dans l'héritage multiple, Python recherche les méthodes dans l'ordre de la classe parent et « Parent1 » précède « Parent2 ».

Si vous souhaitez éviter ou résoudre les conflits dans l'héritage Diamond, vous pouvez utiliser la fonction `super()` pour appeler les méthodes d'une classe parent spécifique, ou remplacer les méthodes pour fournir une implémentation personnalisée.

Ce qui précède contient quelques informations et précautions de base concernant l'héritage multiple. L'héritage multiple est une fonctionnalité puissante, mais elle doit être utilisée avec prudence pour éviter des problèmes potentiels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn