我目前有一个注册回调的类系统,然后在满足某些条件时调用它们.但是我遇到了存储函数对象的一些问题.
A:
class Foo(object):
_callback = None
@classmethod
def Register(cls, fn):
cls._callback = fn
def Bar():
print "Called"
Foo.Register(Bar)
Foo._callback()
input clear Python 2.7.10 (default, Jul 14 2015, 19:46:27) [GCC 4.8.2] on linux
Traceback (most recent call last): File "python", line 12, in
TypeError: unbound method Bar() must be called with Foo instance as first argument (got nothing instead)
当函数不是Foo的成员时,我不确定为什么它需要一个Foo实例.
B:
class Foo(object):
_callback = []
@classmethod
def Register(cls, fn):
cls._callback.append(fn)
def Bar():
print "Called"
Foo.Register(Bar)
Foo._callback[0]()
为什么第一个版本在第二个版本不起作用时不起作用?将其添加到列表时,有哪些功能不同.