Суть задачи: есть функция summator (или, может быть, любая другая с произвольным кол-ом аргументов). Необходимо обернуть в декоратор, который зарегистрирует ее в списке функций объекта Caller. В последствии, нужно итерировать и "исполнить" все зарегистрированные функции.
У меня сложности, видимо ошибка в декораторе и в методе app_func(им хочу регистрировать функции в объекте), нужно как-то добавить в список именно функции и уже из __next их вызывать. Если есть идеи, помогите, где искать?
class Caller:
def __init__(self, *args, **kwargs):
self.arg1 = args
self.arg2 = kwargs
self.list_func = []
self.count_list = 0
def __iter__(self):
return self
def __next__(self):
if len(self.list_func) > self.count_list:
res = self.list_func[self.count_list]
self.count_list += 1
return res
else:
raise StopIteration
def app_func(self, func):
self.list_func.append(func(*self.arg1, **self.arg2))
def register_function(caller0):
def my_decorator(func):
def wrapper(*args, **kwargs):
return caller0.app_func(func(*args, **kwargs))
return wrapper
return my_decorator
caller1 = Caller(1, 2, z=5) # создаем один объект Caller'а, который хранит в себе числовые аргументы
@register_function(caller1) # регистрируем функцию в обоих объектах
def summator(x, y, z): # сама функция просто возвращает сумму аргументов
return x + y + z
for result in caller1: # теперь будем лениво вызывать функции, зарегистрированные
print(result) # в caller1, выводя их результаты на экран