Klassenvererbung
1. Klassenvererbung definieren
Schauen wir uns zunächst die grundlegende Syntax der Klassenvererbung an:
class ClassName(BaseClassName): <statement-1> . . . <statement-N>
Wenn Sie eine Klasse definieren, können Sie sie angeben in Klammern Wenn Sie beim Schreiben geerbter Klassen, wie eingangs erwähnt, keine Klassen erben müssen, müssen Sie auch geerbte Objektklassen schreiben, da in Python die Objektklasse die übergeordnete Klasse aller Klassen ist.
Natürlich handelt es sich bei dem oben Gesagten um eine Einzelvererbung. Python unterstützt auch die Mehrfachvererbung. Die spezifische Syntax lautet wie folgt:
class ClassName(Base1,Base2,Base3): <statement-1> . . . <statement-N>
Eine Sache, die Sie bei der Mehrfachvererbung beachten sollten: Wenn dieselben Methodennamen vorhanden sind die übergeordnete Klasse. Wenn sie bei Verwendung einer Unterklasse nicht angegeben wird, sucht Python von links nach rechts in der Reihenfolge der übergeordneten Klasse in Klammern. Das heißt, wenn die Methode nicht in der Unterklasse gefunden wird, wird von links nach rechts gesucht rechts, um zu sehen, ob die Methode in der übergeordneten Klasse enthalten ist.
Was können geerbte Unterklassen also tun?
Vorteile geerbter Unterklassen:
erbt die Attribute und Methoden der übergeordneten Klasse
Sie können es selbst definieren und die Attribute und Methoden der übergeordneten Klasse überschreiben
2. Rufen Sie die Methode der übergeordneten Klasse auf
Nachdem eine Klasse die übergeordnete Klasse geerbt hat, kann sie die Methode der übergeordneten Klasse direkt aufrufen, wie im folgenden Beispiel: UserInfo2 Von der übergeordneten Klasse UserInfo geerbt, können Sie die get_account-Methode der übergeordneten Klasse direkt aufrufen.
#!/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. Überschreiben von übergeordneten Klassenmethoden
Natürlich können Sie auch übergeordnete Klassenmethoden überschreiben.
Beispiel:
#!/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())
Das letzte gedruckte Ergebnis:
Hier ist der Konstruktor der übergeordneten Klasse, der neu geschrieben wurde.
4. Typbeurteilung von Unterklassen
Für die Vererbungsbeziehung der Klasse müssen wir manchmal den Typ der Klasse beurteilen.
Sie können die Funktion isinstance() verwenden
Sie können die Verwendung der Funktion isinstance() anhand eines Beispiels verstehen. Das Ausgabeergebnis von
#!/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))
lautet wie folgt:
True True True True True False
Sie sehen, dass isinstance() uns nicht nur sagen kann, ob ein Objekt von einem bestimmten Typ ist, sondern auch zur Beurteilung verwendet werden kann Grundtypen.