代码示例:
def func():
return ""
class A:
__app_func__ = func
if __name__ == '__main__':
A().func()
报错提示:
TypeError: func() takes no arguments (1 given)
明明没有加入任何参数,为何会有 takes no arguments (1 given)?
首先,关于实例属性和类属性都是同样的方法:
__app_func__ = func
self.__app_func__ = func
对于A().app_func的区别:
__app_func__ = func
<bound method A.func of <__main__.Aobject at 0x0000000004FCB4A8>>
self.__app_func__ = func
<function func at 0x000000000503B908>
我们要的应该是单纯的function,并不是类A的绑定method,为什么会有这样的区别?
因为在Python的解释器内部,当我们调用t.prt()时,实际上Python解释成Test.prt(t),也就是说把self替换成类的实例。
即当写入app_func = func 相当于没有写self的绑定方法:
class A():
def func ():
pass
故调用A().func ()时,解释器解释为A.func (A()),但是这个绑定方法并没有写self,故报错TypeError: func() takes no arguments (1 given)。
网友评论