Héritage de classe
1. Définir l'héritage de classe
Tout d'abord, examinons la syntaxe de base de l'héritage de classe :
class ClassName(BaseClassName): <statement-1> . . . <statement-N>
Lors de la définition d'une classe, vous pouvez écrire la classe héritée entre parenthèses comme mentionné au début, si vous ne le faites pas. Si vous ne l'utilisez pas, lorsque vous héritez d'une classe, vous devez également écrire pour hériter de la classe d'objet, car la classe d'objet est la classe parent de toutes les classes en Python.
Bien sûr, ce qui précède est un héritage unique, Python prend également en charge l'héritage multiple. La syntaxe spécifique est la suivante :
class ClassName(Base1,Base2,Base3): <statement-1> . . . <statement-N>
Une chose à noter à propos de l'héritage multiple : s'il y a le même nom de méthode dans la classe parent, mais ce n'est pas le cas. spécifié lors de son utilisation dans la sous-classe, Python recherche de gauche à droite dans l'ordre de la classe parent entre parenthèses, c'est-à-dire que lorsque la méthode n'est pas trouvée dans la sous-classe, il recherche de gauche à droite si la classe parent contient la méthode.
Alors, que peuvent faire les sous-classes héritées ?
Avantages des sous-classes héritées :
héritera des propriétés et des méthodes de la classe parent
Vous pouvez les définir vous-même et remplacer les propriétés et les méthodes de la classe parent
2. Appelez les méthodes de la classe parent
.Une classe hérite de la classe parent Après avoir ajouté une classe, vous pouvez appeler directement la méthode de la classe parent. Par exemple, dans l'exemple suivant, UserInfo2 hérite de la classe parent UserInfo, et vous pouvez appeler directement la méthode get_account du parent. classe.
#!/usr/bin/env python # -*- coding: UTF-8 -*- class UserInfo(object): lv = 5 def __init__(self, name, age, account): self.name = name self._age = age self.__account = account def get_account(self): return self.__account class UserInfo2(UserInfo): pass if __name__ == '__main__': userInfo2 = UserInfo2('两点水', 23, 347073565); print(userInfo2.get_account())
3. Réécriture des méthodes de classe parent
Bien sûr, vous pouvez également remplacer les méthodes de classe parent.
Exemple :
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- class UserInfo(object): lv = 5 def __init__(self, name, age, account): self.name = name self._age = age self.__account = account def get_account(self): return self.__account @classmethod def get_name(cls): return cls.lv @property def get_age(self): return self._age class UserInfo2(UserInfo): def __init__(self, name, age, account, sex): super(UserInfo2, self).__init__(name, age, account) self.sex = sex; if __name__ == '__main__': userInfo2 = UserInfo2('两点水', 23, 347073565, '男'); # 打印所有属性 print(dir(userInfo2)) # 打印构造函数中的属性 print(userInfo2.__dict__) print(UserInfo2.get_name())
Le dernier résultat imprimé :
Il s'agit du constructeur de la classe parent qui a été réécrit.
4. Jugement de type des sous-classes
Pour la relation d'héritage de classe, nous devons parfois juger le type de classe.
Vous pouvez utiliser la fonction isinstance().
Vous pouvez comprendre l'utilisation de la fonction isinstance() avec un exemple. Le résultat de sortie de
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- class User1(object): pass class User2(User1): pass class User3(User2): pass if __name__ == '__main__': user1 = User1() user2 = User2() user3 = User3() # isinstance()就可以告诉我们,一个对象是否是某种类型 print(isinstance(user3, User2)) print(isinstance(user3, User1)) print(isinstance(user3, User3)) # 基本类型也可以用isinstance()判断 print(isinstance('两点水', str)) print(isinstance(347073565, int)) print(isinstance(347073565, str))
est le suivant :
True True True True True False
Vous pouvez voir que isinstance() peut non seulement nous dire si un objet est d'un certain type, mais peut également être utilisé pour juger les types de base.