Maison > Article > développement back-end > Quelles sont les méthodes pour réécrire les classes parentes en Python ?
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)
#用元类实现单例模式 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))
1. faire attention à
Méthode 1 : Nom de la classe parent (objet)
La classe parent A sera appelée plusieurs fois (en fonction du nombre d'héritage)
Lors de la réécriture de la classe parent, transmettez le informations requises selon les besoins Paramètres
Méthode 2 : super(nom de la classe, objet).Nom de la méthode()
La classe parent A ne sera appelée qu'une seule fois
Le remplacement de la méthode de la classe parent doit transmettre tous les paramètres
2. Lorsqu'une classe a un héritage et que les variables correspondantes ont été réécrites dans la sous-classe, la modification des variables de la classe parent n'affectera pas la sous-classe
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)
Résultats de sortie
1 1 1
1 2 1
3 2 3
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!