image

Cliquez sur


texte bleu ci-dessus


Suivez-nous ~




L'héritage peut être considéré comme l'une des caractéristiques importantes de l'orienté objet, il peut réduire la quantité de duplication de code. L'héritage peut également rendre le code plus clair. L'héritage ou la redéfinition de la méthode de la classe parent facilite la maintenance du code et l'écriture du code de manière plus flexible. L'héritage peut être compris comme l'héritage de la nature, qui est le processus par lequel les sous-classes acquièrent la propriété de la classe parent ; par conséquent, l'héritage en programmation est le processus par lequel les sous-classes acquièrent les variables membres et les fonctions membres de la classe parent .


L'héritage de Python est un héritage public, pas aussi compliqué que C++, et la syntaxe d'héritage est également très simple :

class 子类名(父类名):    子类类体

Parmi elles, la classe mère est aussi appelée classe de base, super classe ; la classe enfant est aussi appelée classe dérivée .


Exemple 1 : Héritage

class People(object):    def __init__(self, name):        self.name = name        def say(self):        print("我是{},是一个人".format(self.name))

class Student(People): def say(self): print("我是{},是一个学生".format(self.name))

Parmi eux, People est la classe parente et Sudent est la sous-classe. La classe de base de People est object . Notez qu'il s'agit de la classe de base racine de toutes les classes de Python 3.

Student hérite de toutes les méthodes et propriétés de la classe de base People, donc name et __init__ peuvent être utilisés. En même temps, Student réécrit également la méthode say, qui remplacera la méthode say dans People. Voir exemple :

stu = Student("范进")stu.say()
p = People("严监生")p.say()

Résultat de sortie :

我是范进,是一个学生我是严监生,是一个人

L'héritage en Python a les propriétés suivantes :

  • Les membres qui ne sont pas dans la sous-classe seront automatiquement recherchés dans la super-classe. Par exemple , l'initialisation de Student utilisera __inint__ de People

  • Les membres privés ne peuvent pas être hérités et accessibles, mais sont toujours placés dans le dictionnaire __dict__

  • Tout héritage est un héritage public

  • Les sous-classes et les instances peuvent accéder librement aux membres publics ; les membres privés sont masqués et ne sont pas accessibles directement

  • La variable privée est accessible dans la méthode de la classe où se trouve la variable privée

  • Le processus de recherche d'attributs provient de l'instance dict-->class dict-->parent class dict, à son tour pour trouver

Exemple 2 : Vérifier les propriétés ci-dessus

stu = Student("范进")stu.say()p = People("宋江")
print(stu.name)# print(stu.__age) # 私有属性不可访问# stu.__get_age() # 私有方法不可访问
print("{}".format(People.__dict__))print("{}".format(Student.__dict__))

De plus, vous pouvez utiliser les propriétés magiques suivantes pour obtenir certains paramètres :

  • __base__ : la classe de base de la classe

  • __based__ : tuple des classes de base pour la classe

  • __mro__ : Afficher l'ordre de recherche des méthodes, tuple des classes de base

  • __subclasses__() : une liste des sous-classes de la classe

  • mro() : Afficher l'ordre de recherche des méthodes, tuple des classes de base

Exemple 3 : Tester les propriétés ci-dessus

print("{}".format(People.__dict__))print("{}".format(Student.__dict__))
print(stu.__dict__)print(stu.__class__.mro())
print(Student.__base__)print(People.__subclasses__())print(Student.__bases__)print(Student.__mro__)print(Student.mro())

production:

image

On peut voir que Student hérite de People et People hérite de object.

La dernière est l'initialisation de l'héritage. La méthode __init__ n'est pas définie dans la classe Student ci-dessus, et elle utilisera automatiquement cette méthode de People pour l'initialisation. Si la sous-classe veut définir une méthode __init__ par elle-même, alors cette méthode remplacera la méthode de la classe parent, de sorte que la fonction de la classe parent ne peut pas être utilisée normalement. Pour résoudre ce problème, le mot-clé super doit être utilisé.

Exemple 4 : Utilisation du mot-clé super

class Student(People):    def __init__(self, name, weight):        super(Student, self).__init__(name)        self.weight = weight
def say(self): print("我是{},是一个学生, 体重是{}".format(self.name, self.weight))

Le mot-clé super est utilisé à la ligne 4. super (Student, self ) signifie trouver la classe parente de Student , puis utiliser la méthode de cette classe parente pour transmettre les paramètres correspondants.

Instanciez un objet, puis appelez la méthode say :

stu = Student("范进", 68)stu.say()

production:

我是范进,是一个学生, 体重是68
image

image

pointe à partager

image

Comme

image

cliquez pour regarder