鱼C论坛

 找回密码
 立即注册
查看: 2661|回复: 4

037课后练习咨询

[复制链接]
发表于 2017-3-12 22:45:43 | 显示全部楼层 |阅读模式

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

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

x
  1. class MyClass:
  2.         name = 'FishC'
  3.         def myFun(self):
  4.                 print("Hello FishC!")
  5. >>> MyClass.myFun()
  6. Traceback (most recent call last):
  7.   File "<pyshell#7>", line 1, in <module>
  8.     MyClass.myFun()
  9. TypeError: myFun() missing 1 required positional argument: 'self'
复制代码

答案里说:Python为了区分是哪个实例对象调用了方法,于是要求方法必须绑定(通过self参数)才能调用。而为实例化的类对象直接调用方法,因为缺少self参数,所以就会报错。
那为什么?MyClass.myFun('self')就不会报错
MyClass.myFun('gg')也不会报错
MyClass.myFun('s')也不会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-12 23:47:06 | 显示全部楼层
self, gg, s都相当于是实例对象的名称
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-13 09:19:24 | 显示全部楼层
类方法中的self其实指的就是你将类实例化后的实际对象
而MyClass.myFun()你这个是类而不是对象,函数实现时,发现没有self,就是指这个不是对象,没有经过实例化
MyClass.myFun('gg')相当于把'gg','self','s'这些字符串当做对象使用,实际调用顺序应该是
'gg'=MyClass() ‘gg’.myFun() 只是我们无法把字符串直接当成变量,所以才没使用,但是在内存中已经生成这个变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-13 10:13:21 | 显示全部楼层
self是指的这个对象,对于已经实例化的对象,调用那个函数是不需要'self'参数的,
gg.myFun()  python知道其中的参数self就是指的gg

但是你不实例化的话,直接用类名MyClass.myFun() 是不可以的,python并不知道,是哪个对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-15 08:02:03 From FishC Mobile | 显示全部楼层
lumber2388779 发表于 2017-3-13 09:19
类方法中的self其实指的就是你将类实例化后的实际对象
而MyClass.myFun()你这个是类而不是对象,函数实现时 ...

谢谢 懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-4 13:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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