鱼C论坛

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

[已解决]python中类的使用

[复制链接]
发表于 2022-4-16 14:15:24 | 显示全部楼层 |阅读模式

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

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

x
Person().name = '小王八'    ???为什么这个地方没有改变类里面的属性

class Person:
    name = '小乌龟'
    def printname(self):
        print(self.name)
Person().name = '小王八'    ???为什么这个地方没有改变类里面的属性
Person().printname()  →→→→→→→→→ 小乌龟

a = Person()
a.name = '小王八'
a.printname()   →→→→→→→→→    小王八
最佳答案
2022-4-16 14:48:03
本帖最后由 hrpzcf 于 2022-4-16 14:51 编辑
Victor0321 发表于 2022-4-16 14:31
理解的不是很明白 。。。。 我的理解应该这俩的区别就在于一个引进了个中间变量啊。。。


Person().name = '小王八'    ???为什么这个地方没有改变类里面的属性
------》Person()是一个新实例,Person().name = '小王八' 只是改变了这个实例的name,类属性Person.name并没有被改变。如果想要改变类属性,需要Person.name = '小王八' ,不能加括号。

Person().printname()  →→→→→→→→→ 小乌龟
------》Person()又重新实例化了一个新实例,跟上面那个实例不是同一个了,这个实例self.name的值是类属性Person.name的副本,也就是"小乌龟",所以printname方法中print(self.name)还是"小乌龟"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-16 14:25:46 | 显示全部楼层
因为
Person().name = '小王八'    ???为什么这个地方没有改变类里面的属性
Person().printname()  →→→→→→→→→ 小乌龟
实例化了两次,每次都是不同的实例。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-16 14:31:33 | 显示全部楼层
hrpzcf 发表于 2022-4-16 14:25
因为
Person().name = '小王八'    ???为什么这个地方没有改变类里面的属性
Person().printname()  → ...

理解的不是很明白 。。。。 我的理解应该这俩的区别就在于一个引进了个中间变量啊。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-16 14:39:27 | 显示全部楼层
Victor0321 发表于 2022-4-16 14:31
理解的不是很明白 。。。。 我的理解应该这俩的区别就在于一个引进了个中间变量啊。。。

除非你将这段代码放在定义了类之后:
Person.name = "小王八"
因为你前面是加了括号赋值的,所以是给新增的实例对象中的这个变量赋值,
要给他们的类之间进行改变,应在它是类,或类对象时才能定义(小甲鱼后面会讲的)!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-16 14:48:03 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hrpzcf 于 2022-4-16 14:51 编辑
Victor0321 发表于 2022-4-16 14:31
理解的不是很明白 。。。。 我的理解应该这俩的区别就在于一个引进了个中间变量啊。。。


Person().name = '小王八'    ???为什么这个地方没有改变类里面的属性
------》Person()是一个新实例,Person().name = '小王八' 只是改变了这个实例的name,类属性Person.name并没有被改变。如果想要改变类属性,需要Person.name = '小王八' ,不能加括号。

Person().printname()  →→→→→→→→→ 小乌龟
------》Person()又重新实例化了一个新实例,跟上面那个实例不是同一个了,这个实例self.name的值是类属性Person.name的副本,也就是"小乌龟",所以printname方法中print(self.name)还是"小乌龟"

评分

参与人数 2荣誉 +5 鱼币 +7 贡献 +3 收起 理由
isdkz + 5 + 5 + 3 鱼C有你更精彩^_^
python爱好者. + 2 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 19:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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