考虑以下代码:
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
为空,因为我们甚至还没有创建对象。如何在此处添加 2
函数?究竟是什么导致 eat
被称为 2
次? 最佳答案
因为 class definition is an executable statement 。
类主体内(但在函数定义之外)的任何代码都将在运行时执行。
如果您希望代码仅在实例化类对象时运行,请将其放入 __init__
类方法中。
请注意 some tutorials 弄错了,这无疑增加了困惑:
这简直是错误的。
关于python - 类继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42359156/