2

基本的に、これが機能する理由を知りたい:

class MyClass:
  pass

myObj = MyClass()
myObj.foo = 'a'

しかし、これは AttributeError を返します:

myObj = object()
myObj.foo = 'a'

未定義の属性を使用できるクラスと使用できないクラスをどのように判断できますか?

ありがとう。

4

1 に答える 1

2

を使用して任意のクラスに属性を設定できます__dict__。そこに属性が格納されているためです。objectインスタンス(これは奇妙です)と定義するクラスに__slots__は1つもありません:

>>> class Foo(object): pass
...
>>> foo = Foo()
>>> hasattr(foo, "__dict__")
True
>>> foo.bar = "baz"
>>>
>>> class Spam(object):
...     __slots__ = tuple()
...
>>> spam = Spam()
>>> hasattr(spam, "__dict__")
False
>>> spam.ham = "eggs"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Spam' object has no attribute 'ham'
>>>
于 2010-09-06T22:49:28.940 に答える