鱼C论坛

 找回密码
 立即注册
查看: 4044|回复: 6

[已解决]Python的类的self参数问题

[复制链接]
发表于 2017-12-15 00:01:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. >>> class Ball:
  2.         def setname(name):
  3.                 self.name = name
  4.                 print(self.name)

  5.                
  6. >>> a = Ball()
  7. >>> b = Ball()
  8. >>> a.setname('a')
  9. Traceback (most recent call last):
  10.   File "<pyshell#36>", line 1, in <module>
  11.     a.setname('a')
  12. TypeError: setname() takes 1 positional argument but 2 were given
  13. >>> b.setname('b')
  14. Traceback (most recent call last):
  15.   File "<pyshell#37>", line 1, in <module>
  16.     b.setname('b')
  17. TypeError: setname() takes 1 positional argument but 2 were given
复制代码

为什么缺少self参数后会报这样的错误?
最佳答案
2017-12-15 11:04:32
py大神 发表于 2017-12-15 10:11
还有它为什么说我传递了两个位置参数?

任何一个类对象调用函数的时候都默认有一个self参数
你写a.setname('a')除了‘a',还有self
但是你的函数定义中没有self,所以报错
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-15 00:27:30 | 显示全部楼层
还有为什么要初始化对象?__init__方法是如何初始化对象的?他的工作过程是什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-15 08:57:09 | 显示全部楼层
没有self,就不知道你的name要到底传递给哪个对象
self指向了当前调用的这个对象,比如a.setname('a'),如果有self,那么这个self就是指向a的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-15 10:10:31 From FishC Mobile | 显示全部楼层
BngThea 发表于 2017-12-15 08:57
没有self,就不知道你的name要到底传递给哪个对象
self指向了当前调用的这个对象,比如a.setname('a'),如 ...

还有为什么要初始化对象?__init__方法是如何初始化对象的?他的工作过程是什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-15 10:11:25 From FishC Mobile | 显示全部楼层
BngThea 发表于 2017-12-15 08:57
没有self,就不知道你的name要到底传递给哪个对象
self指向了当前调用的这个对象,比如a.setname('a'),如 ...

还有它为什么说我传递了两个位置参数?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-15 11:04:32 | 显示全部楼层    本楼为最佳答案   
py大神 发表于 2017-12-15 10:11
还有它为什么说我传递了两个位置参数?

任何一个类对象调用函数的时候都默认有一个self参数
你写a.setname('a')除了‘a',还有self
但是你的函数定义中没有self,所以报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-15 11:05:38 | 显示全部楼层
py大神 发表于 2017-12-15 10:10
还有为什么要初始化对象?__init__方法是如何初始化对象的?他的工作过程是什么?

python中初始化可以什么都不做
其他语言,中初始化的时候会分配内存空间,当你申明一个对象的时候,系统需要知道它到底占多大的位置
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-19 13:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表