Heim  >  Artikel  >  Backend-Entwicklung  >  Welche Methoden gibt es zum Umschreiben übergeordneter Klassen in Python?

Welche Methoden gibt es zum Umschreiben übergeordneter Klassen in Python?

PHPz
PHPznach vorne
2023-05-04 23:52:132048Durchsuche

1.Grundlegende Anwendung

class Animal(object):
    def eat(self):
        print("动物吃东西")


class Cat(Animal):
    def eat(self):
        print("猫吃鱼")
        # 格式一:父类名.方法名(对象)
        Animal.eat(self)
        # 格式二:super(本类名,对象).方法名()
        super(Cat, self).eat()
        # 格式三:super()方法名()
        super().eat()


cat1 = Cat()
cat1.eat()
print(cat1)

2.Praktische Anwendung

#用元类实现单例模式
class SingletonType(type):
    instance = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls.instance:
            # 方式一:
            # cls.instance[cls] = type.__call__(cls, *args, **kwargs)
            # 方式二
            # cls.instance[cls] = super(SingletonType, cls).__call__(*args, **kwargs)
            # 方式三
            cls.instance[cls] = super().__call__(*args, **kwargs)
        return cls.instance[cls]


class Singleton(metaclass=SingletonType):
    def __init__(self, name):
        self.name = name


s1 = Singleton('1')
s2 = Singleton('2')
print(id(s1) == id(s2))

3.Achtung

1. Wenn eine Klasse Mehrfachvererbung hat, Die mehreren übergeordneten Klassen, die es erbt, haben dieselbe übergeordnete Klasse A. Sie müssen beim Umschreiben der übergeordneten Klasse darauf achten

Methode 1: Name der übergeordneten Klasse.Methodenname (Objekt)

#🎜 🎜 #
  • Die übergeordnete Klasse A wird mehrmals aufgerufen (je nach Anzahl der Vererbungen)

  • Übergeben Sie beim Umschreiben der übergeordneten Klasse alles nach Bedarf Erforderliche Parameter

Methode 2: super(Klassenname, Objekt).Methodenname()

    #🎜🎜 #Die übergeordnete Klasse A wird nur einmal aufgerufen
  • Beim Überschreiben der Methode der übergeordneten Klasse müssen alle Parameter übergeben werden
  • #🎜🎜 #2. Wenn eine Klasse über Vererbung verfügt und die entsprechenden Variablen in der Unterklasse neu geschrieben wurden, hat das Ändern der Variablen der übergeordneten Klasse keine Auswirkungen auf die Unterklasse
  • class Parent(object):
        x = 1
    
    class Child1(Parent):
        pass
    
    class Child2(Parent):
        pass
    
    print(Parent.x, Child1.x, Child2.x)
    Child1.x = 2
    print(Parent.x, Child1.x, Child2.x)
    Parent.x = 3
    print(Parent.x, Child1.x, Child2.x)
Ausgabeergebnis

# 🎜 🎜#

1 1 1

1 2 1

3 2 3

Das obige ist der detaillierte Inhalt vonWelche Methoden gibt es zum Umschreiben übergeordneter Klassen in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen