yuelang85
2013-01-02 19:23:54 +08:00
self._func = Bar.hello
这一行将Bar类的hello函数赋值给self._func变量,而不是实例的hello函数,而hello函数是一个实例方法。
method(self)调用没有错误,是因为给Bar.hello传递了一个实例,相当于:Bar.hello(bar)
self._func()调用出错,是因为没有Bar.hello传递实例,相当于:Bar.hello()。所以会报错:"TypeError: unbound method hello() must be called with Bar instance as first argument (got nothing instead)"
修改方法:
def __init__(self):
super(Foo, self).__init__()
self._func = Bar.hello
改成:
def __init__(self):
super(Foo, self).__init__()
self._func = self.hello
同时:
method(self)
改成:
method()
或者:
self._func() # wrong
改成:
self._func(self) # wrong