• Python декоратор, итератор, как зарегистрировать функцию?

    не много поправил ваш код
    class Caller:
    
        def __init__(self, *args, **kwargs):
            self.list_func = []
            self.args = args
            self.kwargs = kwargs
    
        def __iter__(self):
            for func in self.list_func:
                yield f'{func.__name__}: {func(*self.args, **self.kwargs)}'
    
        def app_func(self, func):
            self.list_func.append(func)
    
    
    def register_function(caller0):
        def my_decorator(func):
            caller0.app_func(func)
    
        return my_decorator
    
    
    caller1 = Caller(1, 2, z=5)  # создаем один объект Caller'а, который хранит в себе числовые аргументы
    
    
    @register_function(caller1)  # регистрируем функцию в обоих объектах
    def summator(x, y, z):  # сама функция просто возвращает сумму аргументов
        return x + y + z
    
    
    @register_function(caller1)  # регистрируем функцию в обоих объектах
    def func_2(x, y, z):  # сама функция просто возвращает сумму аргументов
        return x * y * z
    
    
    for result in caller1:  # теперь будем лениво вызывать функции, зарегистрированные
        print(result)
    
    
    summator: 8
    func_2: 10
    Ответ написан
    Комментировать