鱼C论坛

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

大佬们,我有疑问

[复制链接]
发表于 2023-3-9 23:10:20 | 显示全部楼层 |阅读模式

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

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

x
在第37讲中,代码如下:

class Ball:
    def setName(self, name):
        self.name = name
    def kick(self):
        print('我叫%s, 噢~谁踢我?!'% self.name)


a = Ball()
a.setName('飞火流星')
b = Ball()
b.setName('团队之星')
c = Ball()
c.setName('土豆')  #乱入
a.kick()
我叫飞火流星, 噢~谁踢我?!
b.kick()
我叫团队之星, 噢~谁踢我?!
c.kick()
我叫土豆, 噢~谁踢我?!
---------------------------------------------
其中这个self.name = name,我不是很懂是什么意思?我将.去除,程序报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-9 23:21:01 | 显示全部楼层
在Python中,self是一个指向对象本身的引用。在方法定义中,self是第一个参数,

但在方法调用时不需要显式传递该参数,Python会自动将调用该方法的对象作为self参数传递。

在这个例子中,setName方法接受一个参数name,然后将它存储在对象本身中的一个变量self.name中。

这样,每个Ball对象都有自己的name属性,可以在kick方法中访问。

如果你将self去掉,Python将无法识别变量name所属的对象,因为缺少了一个对象引用,

而将 name 当作 setName 方法的一个局部变量

这就是为什么会报错的原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2023-3-10 16:18:55 | 显示全部楼层
大佬借个楼,我想知道小甲鱼课后练习的那个安装包一直打不开怎么办嗷嗷嗷
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-10 17:13:15 | 显示全部楼层
在 Python 中,通过在类中定义函数(即方法)来描述对象的行为。在类中定义的方法的第一个参数通常是 self,它指向调用该方法的对象本身。

当我们使用 a.setName('飞火流星') 设置对象 a 的名字时,实际上是调用了 Ball 类的 setName 方法,并将 a 自身作为 self 传递给了 setName 方法。在方法内部,使用 self.name 将名字存储在了对象 a 的属性 name 中。

因此,self.name = name 表示将参数 name 的值赋给对象的 name 属性。如果将 . 去除,就相当于直接将参数 name 赋给了一个全局变量,而这个变量并不存在,因此会出现 NameError。


如果有用,记得设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-10 17:54:18 | 显示全部楼层
不浪RR 发表于 2023-3-10 16:18
大佬借个楼,我想知道小甲鱼课后练习的那个安装包一直打不开怎么 ...

什么安装包
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 07:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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