Встречается на собеседованиях • сегодня
Теряем ли доступ к исходной функции, если используем декоратор в Python
Да, доступ к исходной функции теряется, если декоратор не сохраняет её метаданные. Декоратор заменяет исходную функцию новой (обёрткой), поэтому без дополнительных мер атрибуты вроде __name__, __doc__ будут указывать на обёртку.
Пример:
python
def decorator(func):
def wrapper():
return func()
return wrapper
@decorator
def original():
"""Документация"""
pass
print(original.__name__) # 'wrapper', а не 'original'
print(original.__doc__) # None, а не "Документация"Решение:
Используйте functools.wraps для сохранения метаданных:
python
from functools import wraps
def decorator(func):
@wraps(func)
def wrapper():
return func()
return wrapperТеперь original.__name__ и original.__doc__ сохранят исходные значения.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы