誰かが例でこれを理解するのを手伝ってくれませんか?:
インスタンスのディクショナリにデータ記述子と同じ名前のエントリがある場合、データ記述子が優先されます。インスタンスのディクショナリに非データ記述子と同じ名前のエントリがある場合、ディクショナリ エントリが優先されます。
実装は、インスタンス変数よりもデータ記述子に優先順位を与え、非データ記述子よりもインスタンス変数に優先順位を与え、提供されている場合は _ getattr_ () に最低の優先順位を割り当てる優先順位チェーンを通じて機能します。
具体的に私が理解していないのはこれです:
インスタンスのディクショナリに、記述子と同じ名前のエントリを含めるにはどうすればよいですか。例を教えてください。
また、データ記述子がインスタンス変数よりも優先され、インスタンス変数が非データ記述子よりも優先される例を教えてください。
また、以下のコードでは、testclass で __ set __ を呼び出している self.x を見て驚きました: この動作は、上記のリンクの説明によるものだと思います。
オブジェクトの場合、機械は object.__ getattribute __ () にあり、bx を type(b) に変換します。__ 辞書 __ ['x']。__ get __ (b, タイプ(b))。右 ??
#! /usr/bin/env python
class descclass(object):
def __init__(self, value):
print "in desc init"
self.value = value
print "out of desc init"
def __get__(self, inst, insttype):
print "in desc get"
return self.value
def __set__(self,inst, val):
print "in desc set"
self.value = val
class testclass(object):
x = descclass(100)
print "desc created"
def __init__(self, val):
print "in testclass init"
self.x = val # this invokes __set__ on descriptor in x
print "out of testclass init"
if __name__ == '__main__':
t = testclass(45)
print t.x
print vars(t)
print vars(testclass)