lizhizilt 发表于 2023-3-9 23:10:20

大佬们,我有疑问

在第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,我不是很懂是什么意思?我将.去除,程序报错

isdkz 发表于 2023-3-9 23:21:01

在Python中,self是一个指向对象本身的引用。在方法定义中,self是第一个参数,

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

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

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

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

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

这就是为什么会报错的原因。

不浪RR 发表于 2023-3-10 16:18:55

{:10_266:}{:10_266:}{:10_266:}{:10_266:}大佬借个楼,我想知道小甲鱼课后练习的那个安装包一直打不开怎么办嗷嗷嗷{:10_266:}

wanglyndon 发表于 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。

如果有用,记得设置最佳答案

wanglyndon 发表于 2023-3-10 17:54:18

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

什么安装包
页: [1]
查看完整版本: 大佬们,我有疑问