我之前讀過一個問題,詢問Python中是否存在times
方法,該方法允許函數在連續調用n次。在運行時向函數對象添加方法
大家都建議for _ in range(n): foo()
但我想嘗試使用函數裝飾器來編寫不同的解決方案。
這是我有:
def times(self, n, *args, **kwargs):
for _ in range(n):
self.__call__(*args, **kwargs)
import new
def repeatable(func):
func.times = new.instancemethod(times, func, func.__class__)
@repeatable
def threeArgs(one, two, three):
print one, two, three
threeArgs.times(7, "one", two="rawr", three="foo")
當我運行程序時,我得到以下異常:
Traceback (most recent call last): File "", line 244, in run_nodebug File "C:\py\repeatable.py", line 24, in threeArgs.times(7, "one", two="rawr", three="foo") AttributeError: 'NoneType' object has no attribute 'times'
,所以我想這個裝飾沒有工作?我怎樣才能解決這個問題?
這種方法似乎是不太習慣,少個簡單你正在替換的那個。 – 2010-04-17 23:09:32