5

重複の可能性:
Pythonオブジェクトに属性を直接追加できないのはなぜですか?
Pythonでオブジェクトに属性を追加できないのはなぜですか?

次のコードはAttributeErrorをスローしません

class MyClass():
    def __init__(self):
        self.a = 'A'
        self.b = 'B'
my_obj = MyClass()
my_obj.c = 'C'

それはとは対照的です

>>> {}.a = 'A'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'a'

何がそのような違いを生むのでしょうか?MyClassがユーザー定義であるのに対し、dictは組み込みクラスであるということですか?

4

1 に答える 1

2

違いは、ユーザー定義クラスのインスタンスには、デフォルトで関連付けられた属性のディクショナリがあることです。vars(my_obj)またはを使用して、この辞書にアクセスできますmy_obj.__dict__。を定義することで、属性ディクショナリの作成を防ぐことができます__slots__

class MyClass(object):
    __slots__ = []

組み込み型も属性ディクショナリを提供できますが、通常は提供しません。属性をサポートする組み込み型の例は、関数の型です。

于 2012-06-06T11:51:49.727 に答える