__getattr__
またはをいつ定義するかを理解しようとしています__getattribute__
。Python ドキュメント言及は__getattribute__
新しいスタイルのクラスに適用されます。新しいスタイルのクラスとは何ですか?
ベストアンサー1
__getattr__
との主な違いは、 は通常の方法で属性が見つからなかった場合にのみ呼び出される__getattribute__
ことです__getattr__
。 これは、欠落している属性に対するフォールバックを実装するのに適しており、おそらく必要な 2 つのうちの 1 つになります。
__getattribute__
オブジェクトの実際の属性を確認する前に呼び出されるため、正しく実装するのが難しい場合があります。無限再帰に陥ってしまう可能性が非常に高くなります。
新しいスタイルのクラスは から派生し、古いスタイルのクラスは明示的な基底クラスを持たない Python 2.x のクラスです。ただし、とobject
のどちらかを選択する場合、古いスタイルのクラスと新しいスタイルのクラスの区別は重要ではありません。__getattr__
__getattribute__
あなたはほぼ間違いなく を望んでいます__getattr__
。