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('兩點(diǎn)水', 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('兩點(diǎn)水', 23, 347073565, '男'); # 打印所有屬性 print(dir(userInfo2)) # 打印構(gòu)造函數(shù)中的屬性 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('兩點(diǎn)水', 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.