3

最近、同僚が次のセッションを見せてくれました。

>>> 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 のドキュメントによると__slots__、ユーザーが手動で dict インスタンスを提供しない限り、スロットで指定された変数以外の変数を割り当てることはできません。

objectドキュメンテーションは、継承する明示的な必要性について何も述べてBarいません。

なぜこれが起こるのですか?

4

2 に答える 2