调用时 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)