Рассмотрим следующий код:Класс наследования
class A(object):
a = []
@classmethod
def eat(cls, func):
print "called", func
cls.a.append(func)
class B(A):
@A.eat
def apple(self, x):
print x
A.eat(lambda x: x + 1)
print A.a
Выход: called <function apple at 0x1048fba28> called <function <lambda> at 0x1048fbaa0> [<function apple at 0x1048fba28>, <function <lambda> at 0x1048fbaa0>]
Я ожидал A.a
быть пустым, как мы даже не создали object.How являются 2
функция получения сюда добавить, что именно вызывает eat
, чтобы называться 2
раз?
Все инструкции в классе выполняются при загрузке класса, например. 'class A: print ('hello')' будет печатать «привет» при загрузке класса. Оба '@ A.eat' и' A.eat() 'выполняются при загрузке класса, даже без' print A.a' вы получите первые 2 печатных выхода. – AChampion