美文网首页
【python】为何类中方法要有参数self

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

作者: 小熊猫笔记 | 来源:发表于2019-06-20 15:35 被阅读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)。

相关文章

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

    代码示例: 报错提示: 明明没有加入任何参数,为何会有 takes no arguments (1 given)?...

  • python中类的函数中的self

    Python类中的self到底是干啥的 Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管...

  • Python面向对象

    类中定义方法要带参数self,类中访问属性要用self.属性,self类似于Java中的this __init__...

  • Python学习笔记(6)

    Python 术语 “self” —— 这是一个方法参数, 总是指向当前对象实例 Points 可以在类中定义i...

  • 第九章笔记—类(结构)

    Python 中,首字母大写的名称是类 初始化类时 第一个方法init(self,)内的参数第一个须是self,后...

  • 关于类方法中的cls

    在python的类方法中,默认使用的第一个参数是cls,而在实例方法中,一般使用self作为第一个参数。 两处比较...

  • iOS 之self和super区别

    要点: self 调用自己方法,super 调用父类方法 self是类隐藏参数,super是预编译指令 【self...

  • Python基础总结(五)(类和对象)

    self参数 类中定义的每个方法的第一个参数都是self,这个参数指向调用方法的对象本身(你可以给它指定任何一个名...

  • 蟒蛇日志|self(自己)

    问题:Python 中的self的作用是什么? 这其实是函数和类的区别,函数不需要self,类需要这个参数。 以下...

  • 四、函数成员:方法 @GeekBand

    全局函数 成员函数 -:实例方法 self 实例对象 +:类型方法 self 类的类型 内部参数名 外部参数名 方...

网友评论

      本文标题:【python】为何类中方法要有参数self

      本文链接:https://www.haomeiwen.com/subject/dscjqctx.html