J'espère que vous allez bien. Cette question est vraiment de se débarrasser de la référence à la classe de base.Référez-vous à la méthode de la classe parent sans le nom de la classe parent
Fondamentalement, je veux collecter toutes les méthodes d'une méthode de classe enfant au niveau de la classe au lieu du niveau de l'instance, en utilisant une méthode de classe parente. Cependant, on m'a dit que le nom de la classe de base est vraiment long.
La première pièce fonctionne mais est vraiment ennuyante à cause du nom long. Même dans la version propre, je dois faire A.eat à chaque fois. Je promets que les gens ne définiront pas une autre méthode «mange» dans n'importe quel enfant comme B. Puis-je réellement me débarrasser de la référence de la classe de base afin que je puisse utiliser @eat?
class IDontWantToDoThisButNameHasToBeThisLong(object):
a = []
@classmethod
def eat(cls, func):
cls.a.append(func)
class B(IDontWantToDoThisButNameHasToBeThisLong):
@IDontWantToDoThisButNameHasToBeThisLong.eat
def apple(self, x):
print x
IDontWantToDoThisButNameHasToBeThisLong.eat(lambda x: x+1)
x = B()
IDontWantToDoThisButNameHasToBeThisLong.a[0](x, 1)
print IDontWantToDoThisButNameHasToBeThisLong.a[1](1)
propre version:
class A(object):
a = []
@classmethod
def eat(cls, func):
cls.a.append(func)
class B(A):
@A.eat
def apple(self, x):
print x
A.eat(lambda x: x+1)
x = B()
A.a[0](x, 1)
print A.a[1](1)
Sincèrement,