我在裝飾Python中的靜態方法時遇到了一些問題。我想下面的代碼最能代表我的問題:Python:裝飾靜態方法recive不可調用方法
def decorator(func):
print callable(func)
return func
class Foo():
@decorator
@staticmethod
def bar():
return
# outputs False
print callable(Foo.bar)
# outputs True
這似乎是一個錯誤。我想它的出現是因爲當方法Foo.bar
被傳遞給裝飾器時,它是一個函數,而不是一個方法。這是我看到它不可調用的唯一原因,因爲如果我們裝飾一個標準函數,它不可調用,如下所示。
@staticmethod
def function():
return
print callable(function)
# outputs False
因此,這是在執行靜態方法裝飾的一個真正的錯誤,和/或是否有任何簡單的解決方法?我確實想過寫一個裝飾器來設置一個__call__
屬性,但我不知道callable
是如何實現的,所以我無法評估這種方法的成功。
請注意,您必須使用靜態方法的新樣式類才能在實例上調用,因爲它使用了描述符。 – 2011-03-17 21:33:37
要使其工作,只需更改描述符的順序。 – 2011-03-17 21:36:23