Декоратори для роботи в python

В тексті програм для Telegram ботів зустрічаю щось таке (трохи змінив для наочності):

ADMINS = [123456, 234567]


def restrict(f):

    def inner(*args, **kwargs):
        update = args[0]
        if update and hasattr(update, 'message'):
            chat_id = update.message.chat_id
            if chat_id in ADMINS:
                print('Доступ адмінам дозволено!')
                return f(*args, **kwargs)
            else:
                print('Доступ заборонено!')
        else:
            print('Немає аргументу update')

    return inner

@restrict
def start(self, update, context):
    print('тут код функції, буде виконано якщо chat_id = update.message.chat_id')

… тут дещо пропустив ….
command_start  = CommandHandler('start', start)
updater.dispatcher.add_handler(command_start )

такий запис відповідає такому коду показаному нижче:

do_function = restrict(start)
…. тут багато пропущено ….

command_start  = CommandHandler('start', do_function)
updater.dispatcher.add_handler(command_start )

Зобов’язаний зауважити, відповідність коду визначається по результату виконання для клієнта, не гарантується, що код для виконання (бінарний код) такий самий

Залишити відповідь