物件検索順序
属性記述子>については、上記を参照してください属性記述子
書籍や他の人のブログの多くを見るために、関連する知識を見つけるために、プロパティをコーミングすると、私は多くの人があまりにも抽象的であると言うと、明確なプロセスのレンダリングを持っていないことがわかりました。私はここにこのような理解と尊重のための要約を書きます。
私は、共通の属性、データ記述子の参照、非データディスクリプタ検索を見つけるために、それぞれ、3つのケースに財産分割を探します。
共通の属性を探します
- Normal.py
class MyAttr():
name = 'class_levy'
def __init__(self):
self.name = "instance_levy"
def __getattribute__(self, item):
return "This is getattribute"
def __getattr__(self, item):
return "This is getattr"
my = MyAttr()
print(my.name)
- 私は上記のコードを有する、ステップデバッグによってステップ、読者にステップします。電流出力は「これはのgetAttributeである」であります
- コメントは次の現在のコードセグメントの後に、出力が「instance_levy」であります
#def __getattribute__(self, item):
#return "This is getattribute"
- 次__init(自己)次のように書き換えられ、出力内容「class_levy」
def __init__(self):
pass
- 最後に、クラス属性アノテーションは、出力内容は、「これはGETATTRです」
上記のプロセスから、我々は発見プロセスの__getattributeの__の共通の特性を分析することができます() - >例のプロパティ] - > [クラスのプロパティ] - > [GETATTR
データ記述子検索
- DataDes.py
class Data():
def __get__(self, instance, owner):
return "This is get"
def __set__(self, instance, value):
pass
class MyAttr():
name = Data()
def __init__(self):
self.name = "instance_levy"
def __getattribute__(self, item):
return "This is getattribute"
def __getattr__(self, item):
return "This is getattr"
my = MyAttr()
print(my.name)
>記述子__getの__() - - >例のプロパティ - > GETATTR上記の分析方法は、我々は、検索順序の__getattributeの__()を描くことができます
非検索データ記述子
- NotdataDes.py
class NoneData():
def __get__(self, instance, owner):
return "This is get"
class MyAttr():
name = NoneData()
def __init__(self):
self.name = "instance_levy"
def __getattribute__(self, item):
return "This is getattribute"
def __getattr__(self, item):
return "This is getattr"
my = MyAttr()
print(my.name)
上記の分析方法、我々は、検索順序の__getattributeの__()を描くことができます - >例のプロパティ] - > [記述子__getの__() - >のgetattrを
フローチャート
以下は、複合体が混乱感を引き起こす可能性があり、より簡単に3例は、私のことだった理解するために、3例のフローチャートである3例を説明するために、プロセスのほとんどで説明したではありません。