Встречается на собеседованиях • сегодня

Теряем ли доступ к исходной функции, если используем декоратор в 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__ сохранят исходные значения.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы