【发布时间】:2021-11-10 16:57:52
【问题描述】:
我注意到一些我不完全理解的奇怪行为。出于性能原因,我在课堂上使用 slots。为什么一个简单的类变量赋值就这么容易破坏所有的类实例?
class Person:
__slots__ = ('name',)
def __init__(self, name) -> None:
self.name = name
def __repr__(self):
return self.name
p1 = Person('mc')
p2 = Person('pp')
# The nasty thing here:
Person.name = 'hacked'
print(p1)
print(p2)
因此,所有实例的“名称”属性都会被覆盖。解释器不应该阻止它吗?当您想显式定义一个与插槽中使用的同名的类变量时,就会出现这种情况。
我有点困惑,因为它看起来太容易受到意外损坏。
【问题讨论】: