在功能如何工作预先定义的描述符?(How work pre-defined descriptors

2019-07-19 16:56发布

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__ ,一切由返回的对象别的吗?

Answer 1:

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__确实只是其中的一部分的结合的方法的)。

这就是为什么你不能为不带任何arguments-必须采取的第一个参数(传统上是一个功能做到这一点self ),其通过具体实例。



文章来源: How work pre-defined descriptors in functions?