PHP前端开发

Python中__slots__如何影响实例属性的访问和修改?

百变鹏仔 3天前 #Python
文章标签 实例

为什么修改类属性__slots__影响实例?

你提供的代码中出现了以下问题:

class Person:    __slots__ = ("name")    def __init__(self):        self.name=13shili=Person()print(shili.name)# Person.name = 143print(id(shili.name),id(Person.name))Person.name = 143print(id(shili.name),id(Person.name))shili.name=13

当你修改类属性 person.name 时,即使实例 shili 已经有了 name 属性,它也受到影响。这是因为:

所以,当你修改 person.name 时,即使 shili 已经有了 name 属性,它也会受影响,因为它实际上访问的是共享的类属性。而当你给 shili.name 重新赋值一个值时,相当于创建了一个新的实例属性,覆盖了类属性。

立即学习“Python免费学习笔记(深入)”;