考虑下面的代码:类继承
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')'会在加载类时打印“hello”。当类加载时,'@ A.eat'和'A.eat()'都是执行语句,即使没有'print A.a',也会得到前2个打印输出。 – AChampion