caesar2334 发表于 2020-7-28 23:46:15

关于局部变量的问题

class ball:
        def setname(self,name):
                self.name = name
        def kick(self):
                print("我叫%s!" % self.name)

               
>>> a = ball()
>>> a.setname("球a")
>>> a.kick()
我叫球a!

问题:我想问问上述class ball 中两个函数中相同的变量和公用呢,不是即使是相同的名字在不同的函数作用域中的身份也是不一样的吗?还是我记错了呢,请指教!

Twilight6 发表于 2020-7-29 00:19:50



我想问问上述class ball 中两个函数中相同的变量和公用呢,不是即使是相同的名字在不同的函数作用域中的身份也是不一样的吗?还是我记错了呢,请指教!

在类中变量有三种:

1. 类体中,所有函数之外:此范围定义的变量,称为类属性或类变量;
2. 类体中,所以函数内部:以“self.变量名”的方式定义的变量,称为实例属性或实例变量;
3. 类体中,所有函数内部:以“变量名=变量值”的方式定义的变量,称为局部变量;

所以在这带self 是实例属性,而实例属性作用于整个类的实例空间,也就是同个实例中的函数方法都可以使用和改变这个属性

而你在方法内不带 self 的参数才是局部变量哈~局部变量只供自己函数使用


heidern0612 发表于 2020-7-29 07:57:35

类跟函数是不一样的。你类中的函数加了self,意味着这就是个共用的实例模板。

在实例化的时候,每个实例都会创建自己的setname和kick函数。

实例和实例之间是不通用的。

zltzlt 发表于 2020-7-29 08:33:21

self.name 是实例属性,在所有方法中都能通过 self.name 访问到它。而 setname() 中的 name 属于局部变量,在 setname() 之外就访问不到局部变量 name 了

caesar2334 发表于 2020-7-29 22:18:34

好的 谢谢大家!
页: [1]
查看完整版本: 关于局部变量的问题