【python】为何类中方法要有参数self

2019-06-20  本文已影响0人  小熊猫笔记

代码示例:

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)。

上一篇 下一篇

猜你喜欢

热点阅读