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__ — это оригинальная функция без декоратора.