__getattribute__()
特別な方法との文脈で以下の優先順位が何を意味するのか理解できませんDescriptors
コアPythonプログラミングtopic("Precedence") - under topic ("Desriptors")
の本でこれを3回読んだのですが、それでも理解できません。これらの優先順位とは何か、どこで使用されているのかを誰かが説明できますか?
- クラス属性
- データ記述子
- インスタンス属性
- 非データ記述子
- デフォルトは
__getattr__()
私はPythonのドキュメントも読みました。そこで私は以下のステートメントを見つけました:-
インスタンスバインディングの場合、記述子呼び出しの優先順位は、定義されている記述子メソッドによって異なります。記述子は、、およびの任意の組み合わせを定義
__get__()
でき__set__()
ます__delete__()
。が定義されていない場合__get__()
、オブジェクトのインスタンスディクショナリに値がない限り、属性にアクセスすると記述子オブジェクト自体が返されます。記述子が定義__set__()
および/または の場合__delete__()
、それはデータ記述子です。どちらも定義していない場合は、非データ記述子です。通常、データ記述子はとの両方__get__()
を定義します__set__()
が、非データ記述子には__get__()
メソッドのみがあります。定義されたデータ記述子は
**__set__()**
、**__get__()**
常にインスタンスディクショナリの再定義を上書きします。対照的に、非データ記述子はインスタンスによってオーバーライドできます。Pythonメソッド(
staticmethod()
およびを含むclassmethod()
)は、非データ記述子として実装されます。したがって、インスタンスはメソッドを再定義してオーバーライドできます。これにより、個々のインスタンスが同じクラスの他のインスタンスとは異なる動作を取得できるようになります。
誰かがそれが何であるかを説明するために小さな例をあげることができますfirst paragraph
か?override a redefinition in an instance dictionary
また、「- ?? 」とはどういう意味ですか?