Klassenvererbun...LOGIN

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:

cbf5cc8617f8b40e0e38e94fd0d892e.png

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.

nächsten Abschnitt
KapitelKursunterlagen