Python 辞書はオブジェクト属性をエミュレートできますか?
オブジェクト属性として辞書キーにアクセスすると便利ですが、潜在的な問題について疑問が生じます。この記事では、このニーズに対処するために設計されたカスタム クラスである AttrDict の使用法について説明します。
カスタム クラスのアプローチ
辞書のオブジェクト属性をエミュレートするには、 AttrDict というサブクラス:
class AttrDict(dict): def __getattr__(self, attr): return self[attr] def __setattr__(self, attr, value): self[attr] = value
カスタムの利点クラス
カスタムの欠点クラス
仕組み
AttrDict クラスは、それ自体をオブジェクトの内部 __dict__ 属性として割り当てます。これにより、辞書の名前空間がオブジェクトの属性にリンクされ、両方の構文を介してアクセスできるようになります。
Python がこの機能を提供しない理由
Python は、属性への直接アクセス機能を回避して、名前空間の汚染。ディクショナリ項目を割り当てると、メソッドの属性がオーバーライドされ、予期しない動作が発生する可能性があります。例:
d = AttrDict() d.update({'items': ['jacket', 'necktie', 'trousers']}) for k, v in d.items(): # TypeError: 'list' object is not callable
以上がPython 辞書はオブジェクトのように使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。