クラス __dict__ がマッピングプロキシであるのはなぜですか? 質問する

クラス __dict__ がマッピングプロキシであるのはなぜですか? 質問する

なぜクラス__dict__は なのにmappingproxyインスタンス__dict__は単なるdict

>>> class A:
...     pass

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

ベストアンサー1

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

Python は「同意する大人の言語」であり、オブジェクトの辞書は公開され、ユーザーによって変更可能です。ただし、クラスのクラス レベルの属性とメソッドの場合、キーが文字列であることを保証できれば、クラス レベルでの属性とメソッドの検索の一般的なケース コードを簡素化して高速化できます。特に、新しいスタイルのクラスの __mro__ 検索ロジックは、クラス辞書のキーが文字列であると想定することで簡素化され、高速化されます。

おすすめ記事