1. ホーム
  2. python

[解決済み] なぜクラス__dict__はmappingproxyなのですか?

2023-02-01 22:33:23

質問

私は、なぜクラス __dict__mappingproxy のインスタンスですが __dict__ は単なる dict

>>> class A:
...     pass

>>> a = A()
>>> type(a.__dict__)
<class 'dict'>
>>> type(A.__dict__)
<class 'mappingproxy'>

どのように解決するのですか?

これは、クラスレベルの属性とメソッドのキーが文字列のみであることをインタプリタが保証するのに役立ちます。

他の点では、Pythonは"consenting adults language"であり、オブジェクトのためのdictsはユーザーによって公開され、変更可能であることを意味します。 しかし、クラスレベルの属性やクラスのメソッドの場合、キーが文字列であることを保証できれば、クラスレベルの属性やメソッドの検索のためのコモンケースのコードを簡素化し、高速化することができます。 特に、新スタイルのクラスに対する __mro__ 検索ロジックは、クラス dict のキーが文字列であると仮定することで、簡略化および高速化されます。