我的一位同事最近向我展示了以下会话:
>>> class Foo:
... __slots__ = ['x']
... def __init__(self):
... self.x = "x"
...
>>> f = Foo()
>>> f.x
'x'
>>> f.y = 1
>>> class Bar(object):
... __slots__ = ['x']
... def __init__(self):
... self.x = "x"
...
>>> b = Bar()
>>> b.x
'x'
>>> b.y = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Bar' object has no attribute 'y'
根据Python 文档,除非用户手动提供 dict 实例,否则定义__slots__
应该使得无法分配除槽中指定的变量之外的任何其他变量:
该文档没有说明明确需要从object
like继承Bar
。
为什么会这样?