鱼C论坛

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

[已解决]关于局部变量的问题

[复制链接]
发表于 2020-7-28 23:46:15 | 显示全部楼层 |阅读模式

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

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

x
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 中两个函数中相同的变量和公用呢,不是即使是相同的名字在不同的函数作用域中的身份也是不一样的吗?还是我记错了呢,请指教!
最佳答案
2020-7-29 00:19:50


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


在类中变量有三种:

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

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

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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-29 00:19:50 | 显示全部楼层    本楼为最佳答案   


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


在类中变量有三种:

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

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

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


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

使用道具 举报

发表于 2020-7-29 07:57:35 | 显示全部楼层
类跟函数是不一样的。你类中的函数加了self,意味着这就是个共用的实例模板。

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

实例和实例之间是不通用的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-29 08:33:21 | 显示全部楼层
self.name 是实例属性,在所有方法中都能通过 self.name 访问到它。而 setname() 中的 name 属于局部变量,在 setname() 之外就访问不到局部变量 name 了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-29 22:18:34 | 显示全部楼层
好的 谢谢大家!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 16:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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