我理解在调用方法时,“self”会隐式地作为参数传递。我正在学习描述符,并且了解函数如何“变成”方法,我至少在概念上理解属性是如何与对象“绑定”的,我已经阅读了多篇在线文章和Raymond Hettinger的描述符教程。
然而,在下面的示例中,我不明白对于函数f的实例的引用(即在__get__上的参数“self”,将隐式传递的参数)是从哪里来的。
我将这与f本身上的self参数进行对比,我理解当调用__get__时,它将作为参数传递给参数obj。
当调用__get__时,Python如何知道需要传递给MethodType的底层函数是什么?我知道这是传递给self的参数,但是这是如何/何时发生的?当我学习__get__时,我以为我理解了self的工作原理,以及函数类型上的__get__可以返回一个函数或者一个MethodType,但是我感到非常沮丧。
我希望这有意义。 谢谢。
然而,在下面的示例中,我不明白对于函数f的实例的引用(即在__get__上的参数“self”,将隐式传递的参数)是从哪里来的。
我将这与f本身上的self参数进行对比,我理解当调用__get__时,它将作为参数传递给参数obj。
当调用__get__时,Python如何知道需要传递给MethodType的底层函数是什么?我知道这是传递给self的参数,但是这是如何/何时发生的?当我学习__get__时,我以为我理解了self的工作原理,以及函数类型上的__get__可以返回一个函数或者一个MethodType,但是我感到非常沮丧。
我希望这有意义。 谢谢。
class Function:
def __get__(self, obj, objtype=None):
"Simulate func_descr_get() in Objects/funcobject.c"
if obj is None:
return self
return MethodType(self, obj)
class D:
def f(self, x):
return x