Ранее я прочитал вопрос, спрашивающий, существует ли в 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'
Итак, я полагаю, декоратор не работал? Как я могу это исправить?