Junior — Middle
87
Hogyan valósítható meg egy dekorátor Pythonban úgy, hogy az eredeti függvény továbbra is elérhető maradjon?
Válasz az MI-től
sobes.tech MI
Чтобы оригинальная функция оставалась доступной после применения декоратора, можно сохранить ссылку на неё как атрибут обёртки. Часто для этого используют 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__ — это оригинальная функция без декоратора.