繁体   English   中英

如何在函数中预定义描述符?

[英]How work pre-defined descriptors in functions?

Python函数有一个描述符。 我相信在大多数情况下我不应该直接使用它,但我想知道这个功能是如何工作的? 我用这样的对象尝试了几个操作:

  1.  def a(): return 'x' a.__get__.__doc__ 'descr.__get__(obj[, type]) -> value' 

    什么是obj,什么是类型?

  2.  >>> 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) 

    当然,我不能用不带参数的函数来做这个技巧。 是否只需要调用带参数的函数?

  3.  >>> def d(arg1, arg2, arg3): return arg1, arg2, arg3 >>> d.__get__('s')('x', 'a') ('s', 'x', 'a') 

    为什么第一个参数直接由__get__ ,而其他所有参数都由返回的对象获取?

a.__get__是一种函数绑定到对象的方法。 从而:

class C(object):
    pass

def a(s):
    return 12

a = a.__get__(C)

是粗略的等价物

class C(object):
    def a(self):
        return 12

(虽然这样做不是一个好主意。首先, C不会知道它有一个名为a的绑定方法,你可以通过dir(C)来确认。基本上, __get__只做一个部分绑定过程)。

这就是为什么你不能为一个不带参数的函数做这个 - 它必须采用传递特定实例的第一个参数(传统的self )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM