Junior — Middle
72
Python-да декораторды пайдалану түпнұсқа функцияға қол жеткізуді жоғалтуға әкеледі ме?
AI-дан жауап
sobes.tech AI
Python-да декораторды қолдану түпнұсқа функцияға қол жеткізуді міндетті түрде жоғалтпайды, бірақ бұл декоратор қалай жазылғанына байланысты.
Егер декоратор түпнұсқа функцияға сілтемені сақтамаса, оған қол жеткізу қиын болуы мүмкін. Мұны болдырмау үшін әдетте __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}!")
# Түпнұсқа функцияға қол жеткізу
print(greet.__wrapped__) # <function greet at 0x...>
Осылайша, functools.wraps көмегімен декоратор түпнұсқа функцияға сілтемені сақтайды, және оған қол жеткізу сақталады.