Python 函数有一个描述符。我相信在大多数情况下我不应该直接使用它,但我想知道这个功能是如何工作的?我尝试了对这样的对象的一些操作:
def a(): return 'x' a.__get__.__doc__ 'descr.__get__(obj[, type]) -> value'
obj是什么,类型是什么?
>>> a.__get__() TypeError: expected at least 1 arguments, got 0 >>> a.__get__('s') <bound method ?.a of 's'> >>> a.__get__('s')() TypeError: a() takes no arguments (1 given)
当然,我不能用不带参数的函数来做这个把戏。是否只需要调用带参数的函数?
>>> def d(arg1, arg2, arg3): return arg1, arg2, arg3 >>> d.__get__('s')('x', 'a') ('s', 'x', 'a')
为什么第一个参数直接由
__get__
获取,而其他所有参数由返回的对象获取?
最佳答案
a.__get__
是一种将函数绑定(bind)到对象的方法。因此:
class C(object):
pass
def a(s):
return 12
a = a.__get__(C)
大致相当于
class C(object):
def a(self):
return 12
(尽管这样做不是一个好主意。一方面,C
不知道它有一个名为 a
的绑定(bind)方法,您可以通过执行 dir(C)
来确认。基本上,__get__
只执行绑定(bind)过程的一部分)。
这就是为什么您不能为不带参数的函数执行此操作的原因 - 它必须采用传递特定实例的第一个参数(传统上是 self
)。
关于python - 函数中的预定义描述符如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14799860/