调用时 Python 描述符属性问题
Issue on Python Descriptor attribute when called
我对代码 'self.funcGet' 感到困惑,因为它指的是 'get' 函数 [= =18=]不受class或实例的约束。 谁能解释一下我在这个描述符中看到的奇怪之处
class Desc:
def __init__(self,funcGet):
self.funcGet = funcGet #funcGet -> get
def __get__(self,instance,owner):
return self.funcGet(instance) #self.funcGet(instance) -> get(instance)
#return instance.__class__.get(instance) #same as code above, this is what I caught in mind
class Test:
def get(self):
return 'wow'
prop = Desc(get)
a = Test()
print(a.prop) #This call __get__ in Desc Class
输出是
wow
行中:
return self.funcGet(instance)
您只是从测试 class 调用 'get' 函数(在此步骤未绑定)并返回结果("wow" 字符串)。
通过“.”您从描述符中触发的访问 __get__
(绑定应该发生的地方)
要绑定您应该使用的实例:
return self.funcGet.__get__(instance)
我对代码 'self.funcGet' 感到困惑,因为它指的是 'get' 函数 [= =18=]不受class或实例的约束。 谁能解释一下我在这个描述符中看到的奇怪之处
class Desc:
def __init__(self,funcGet):
self.funcGet = funcGet #funcGet -> get
def __get__(self,instance,owner):
return self.funcGet(instance) #self.funcGet(instance) -> get(instance)
#return instance.__class__.get(instance) #same as code above, this is what I caught in mind
class Test:
def get(self):
return 'wow'
prop = Desc(get)
a = Test()
print(a.prop) #This call __get__ in Desc Class
输出是
wow
行中:
return self.funcGet(instance)
您只是从测试 class 调用 'get' 函数(在此步骤未绑定)并返回结果("wow" 字符串)。
通过“.”您从描述符中触发的访问 __get__
(绑定应该发生的地方)
要绑定您应该使用的实例:
return self.funcGet.__get__(instance)