通常的描述符用在類屬性,像這樣:Python的描述符(__get__,__set__)上功能參數
class Owner(object):
attr = Attr()
當越來越Owner.attr
,Attr.__get__(self, instance, owner)
被稱爲其中self = Owner.attr
,instance = None
和owner = Owner
。
當Owner
被實例化時instance
將是Owner
的實例。
現在我想將這個概念應用於方法參數而不是類屬性。
會如何看待在實踐中(我們假設的Attr
功能是包裝一個字符串給定的字符串):
class Example(object):
def funct(self, param=Attr('t')):
return param == 'test' # < param calls the descriptor here
e = Example()
e.funct('es') # < is True because 'es' wrapped with 't' becomes 'test'.
當訪問param
,Attr.__get__(self, instance, owner)
將與self = funct.param
,instance = funct
和owner = funct
被稱爲(儘管owner
和instance
是一樣的,可能是None
?)。 但由於funct
不是一個類,所以這不起作用。我如何得到類似於工作的東西?
該函數的裝飾器將處理參數,所以這可能會增加我認爲的解決方案。 裝飾者必須是,例如,能夠改變包裝字符串。
你可以添加一個使用場景來顯示如何訪問'param'? – unutbu 2013-04-30 13:07:13
這個功能的目的是什麼?你是否試圖將狀態附加到函數中?你是否試圖通過參數動態定義函數的行爲?你是否試圖推遲一些依賴的解析,直到函數被執行? – 2013-04-30 13:22:27
@unutbu我已經添加了一個用例,我認爲更適合。你覺得現在更清楚了嗎? – siebz0r 2013-04-30 13:31:23