簡體   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