鱼C论坛

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

[已解决]类和对象问题

[复制链接]
发表于 2022-12-26 16:26:59 | 显示全部楼层 |阅读模式

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

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

x
1、class C:
        x = []
        def add_x(self, x):
                self.x.append(x)
2、class C:
        def __init__(self):
                self.x = []
        def add_x(self, x):
                self.x.append(x)
a = C()
b = C()
a.add_x(520)
b.add_x(250)
第一个问题:为什么第一种情况下会修改C的属性,不是修改的是对象a和b属性吗?
第二个问题:为什么第一种情况下对象a和b不应该是相互无关的吗,为什么它们的属性会一起修改?
第三个问题:为什么第二种情况下反而可以单独修改对象属性,而不修改类的属性和方法?
最佳答案
2022-12-26 17:46:24
首先你要理解什么是类属性,什么时候对象属性:
类属性不属于任何一个对象特有,他是类以及他的所有对象共有的一个属性
对象属性必须和对象自身绑定,就是在定义类的时候用self形参代替
第一个问题:你定义的是类的属性,只是你用对象c和d对该属性进行访问而已
第二个问题:这里访问的是类属性,并不是对象属性
第三个问题:对象属性是用self形参和自身绑定的,类C并没有这个属性
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-26 17:46:24 | 显示全部楼层    本楼为最佳答案   
首先你要理解什么是类属性,什么时候对象属性:
类属性不属于任何一个对象特有,他是类以及他的所有对象共有的一个属性
对象属性必须和对象自身绑定,就是在定义类的时候用self形参代替
第一个问题:你定义的是类的属性,只是你用对象c和d对该属性进行访问而已
第二个问题:这里访问的是类属性,并不是对象属性
第三个问题:对象属性是用self形参和自身绑定的,类C并没有这个属性
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-27 08:22:53 | 显示全部楼层
lxping 发表于 2022-12-26 17:46
首先你要理解什么是类属性,什么时候对象属性:
类属性不属于任何一个对象特有,他是类以及他的所有对象共 ...

1、class C:
        x = []
        def add_x(self, x):
                self.x.append(x)
2、class C:
        x=520
        def add_x(self,y):
                self.x=y
c=C()
c.add_x(250)
为什么第一个定义的就是类属性,第二个定义的就是对象属性呢?如何从class类定义的哪个语句可以区分数定义的类的属性还是对象的属性呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-27 08:25:01 | 显示全部楼层
lxping 发表于 2022-12-26 17:46
首先你要理解什么是类属性,什么时候对象属性:
类属性不属于任何一个对象特有,他是类以及他的所有对象共 ...

为什么帖子上在第一种情况下加了一个__init__函数之后就能从定义类属性变成了定义对象属性呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-27 09:43:37 | 显示全部楼层
wangye666 发表于 2022-12-27 08:25
为什么帖子上在第一种情况下加了一个__init__函数之后就能从定义类属性变成了定义对象属性呢?

新版61讲和62讲的视频好好琢磨理解一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 23:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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