py大神 发表于 2017-12-15 00:01:31

Python的类的self参数问题

>>> class Ball:
        def setname(name):
                self.name = name
                print(self.name)

               
>>> a = Ball()
>>> b = Ball()
>>> a.setname('a')
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
    a.setname('a')
TypeError: setname() takes 1 positional argument but 2 were given
>>> b.setname('b')
Traceback (most recent call last):
File "<pyshell#37>", line 1, in <module>
    b.setname('b')
TypeError: setname() takes 1 positional argument but 2 were given
为什么缺少self参数后会报这样的错误?

py大神 发表于 2017-12-15 00:27:30

还有为什么要初始化对象?__init__方法是如何初始化对象的?他的工作过程是什么?

BngThea 发表于 2017-12-15 08:57:09

没有self,就不知道你的name要到底传递给哪个对象
self指向了当前调用的这个对象,比如a.setname('a'),如果有self,那么这个self就是指向a的

py大神 发表于 2017-12-15 10:10:31

BngThea 发表于 2017-12-15 08:57
没有self,就不知道你的name要到底传递给哪个对象
self指向了当前调用的这个对象,比如a.setname('a'),如 ...

还有为什么要初始化对象?__init__方法是如何初始化对象的?他的工作过程是什么?

py大神 发表于 2017-12-15 10:11:25

BngThea 发表于 2017-12-15 08:57
没有self,就不知道你的name要到底传递给哪个对象
self指向了当前调用的这个对象,比如a.setname('a'),如 ...

还有它为什么说我传递了两个位置参数?

BngThea 发表于 2017-12-15 11:04:32

py大神 发表于 2017-12-15 10:11
还有它为什么说我传递了两个位置参数?

任何一个类对象调用函数的时候都默认有一个self参数
你写a.setname('a')除了‘a',还有self
但是你的函数定义中没有self,所以报错

BngThea 发表于 2017-12-15 11:05:38

py大神 发表于 2017-12-15 10:10
还有为什么要初始化对象?__init__方法是如何初始化对象的?他的工作过程是什么?

python中初始化可以什么都不做
其他语言,中初始化的时候会分配内存空间,当你申明一个对象的时候,系统需要知道它到底占多大的位置
页: [1]
查看完整版本: Python的类的self参数问题