Sobes.tech
Junior — Middle
80

Python-да декораторды қалай жүзеге асыруға болады, сонда түпнұсқа функция қол жетімді болып қалады?

AI-дан жауап

sobes.tech AI

Чтобы оригинальная функция оставалась доступной после применения декоратора, можно сохранить ссылку на неё как атрибут обёртки. Часто для этого используют functools.wraps, который копирует метаданные и сохраняет ссылку на оригинал в атрибуте __wrapped__.

Пример:

import functools

def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("Перед вызовом функции")
        result = func(*args, **kwargs)
        print("После вызова функции")
        return result
    return wrapper

@my_decorator
def greet(name):
    print(f"Привет, {name}!")

# Вызов декорированной функции

greet("Мир")

# Доступ к оригинальной функции
original = greet.__wrapped__
original("Мир")

Таким образом, greet.__wrapped__ — это оригинальная функция без декоратора.