Надеюсь, вы отлично справляетесь. Эти вопросы действительно касаются избавления от ссылки на базовый класс.Обратитесь к методу класса родителя без имени класса родителя
В основном я хочу собрать все методы методов дочернего класса на уровне класса вместо уровня экземпляра, используя метод родительского класса. Однако мне сказали, что имя базового класса действительно длинное.
Первая часть работает, но очень раздражает из-за длинного имени. Даже в чистой версии я должен каждый раз делать A.eat.
Я обещаю, что люди не будут определять другой метод «есть» в любом ребенке типа B. Могу ли я действительно избавиться от ссылки базового класса, чтобы я мог использовать @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)
Чистая версия:
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)
С уважением,