Python 如何在函数中使用预定义的描述符?

Python 如何在函数中使用预定义的描述符?,python,function,metaprogramming,descriptor,Python,Function,Metaprogramming,Descriptor,Python函数有一个描述符。我相信在大多数情况下我不应该直接使用这个功能,但我想知道这个功能是如何工作的?我用这样的物体做了几次操作: 什么是obj?什么类型 为什么第一个参数直接由\uuuu get\uuuu获取,而其他所有参数都由返回的对象获取 a.\uuuu get\uuuu是一种将函数绑定到对象的方法。因此: class C(object): pass def a(s): return 12 a = a.__get__(C) 大致相当于 class C(obj

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

  • 什么是obj?什么类型

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


  • a.\uuuu get\uuuu
    是一种将函数绑定到对象的方法。因此:

    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)
    来确认。基本上,
    \uget\uuu
    只执行绑定过程的一部分)

    这就是为什么不能对不带参数的函数执行此操作的原因-它必须使用第一个参数(传统上是
    self
    )来传递特定实例。

    a。
    类似于
    C.a
    ,而不是第二个示例中的
    C().a
    >>> def d(arg1, arg2, arg3):
            return arg1, arg2, arg3
    >>> d.__get__('s')('x', 'a')
    ('s', 'x', 'a')
    
    class C(object):
        pass
    
    def a(s):
        return 12
    
    a = a.__get__(C)
    
    class C(object):
        def a(self):
            return 12