猫史档案馆


急,求助,关于类

用户:1111111111111111211111111111111112查看:52 回复:4 评论:10 创建时间:2023-05-14T19:20:59


class person:
__slots__ = ("name")
def __init__(self):
self.name=12
shili = person()

print(shili.name)
person.name=1090
print(shili.name)
print(person.__dict__) 为什么修改类属性会影响实例属性?(缩进被吞)


回复

上一页第 1 页 / 共 1 页下一页
SCS_user_LoeheodVOQSCS_user_LoeheodVOQ

因为你定义了__slots__,所以类自动添加了类属性name,修改name就会影响到实例属性,没有__slots__就不会了

点赞0


评论

能否详细说明一下为啥修改name就会影响到实例属性?

我也不是非常清楚()好像是修改类属性就是会影响示例属性


SCS_user_LoeheodVOQSCS_user_LoeheodVOQ

class A:
    x = 1

a = A()

a.x // 1
A.x // 1

A.x = 2

A.x // 2
a.x // 2

点赞0


评论

注释写错了,你把//看成#就行了

主要是这是在我没有设置实例属性x的情况下才会访问类属性,但是上述代码def __init__(self): self.name=12我已经设置了实例属性,但是类属性任然影响它

slots初始化的类属性比较特殊,得到的值是member 'xxx' of 'xxx' objects


𝙲ℴ𝗌𝔦𝒹ₑ𝑟𝙲ℴ𝗌𝔦𝒹ₑ𝑟

原实例类继承原型类

当实例类属性未设置值

则调用原型类的属性

所以修改原型类会影响到实例(补充)

点赞0


评论

但我的初始化函数self.name=12已经设置了实例属性,为什么类属性还是影响?求解答

第一,不是在实例创建后修改实例,链接使用原型

第二,原型继承

(大概吧()


𝙲ℴ𝗌𝔦𝒹ₑ𝑟𝙲ℴ𝗌𝔦𝒹ₑ𝑟

center_image

点赞0


评论

让ChatGPT来解答()