Sobes.tech
Junior — Middle

Kāda ir funkcijas functools.wraps loma, izveidojot dekoratorus Python?

sobes.tech AI

Atbilde no AI

Funkcija functools.wraps tiek izmantota, veidojot dekoratorus Python, lai saglabātu sākotnējās funkcijas metadatus, ko apkārt dekorators. Bez wraps izmantošanas funkcijas nosaukums, tās dokumentācija (doc) un citi atribūti tiek aizstāti ar dekoratora iekšējās funkcijas atribūtiem, kas apgrūtina kļūdu meklēšanu un dokumentāciju.

Piemērs:

import functools

def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("Pirms funkcijas izsaukšanas")
        result = func(*args, **kwargs)
        print("Pēc funkcijas izsaukšanas")
        return result
    return wrapper

@my_decorator
def greet(name):
    "Sveiciena funkcija"
    print(f"Sveiki, {name}!")

print(greet.__name__)  # Izvadīs 'greet', ne 'wrapper'
print(greet.__doc__)   # Izvadīs 'Sveiciena funkcija'

Tādējādi, functools.wraps palīdz saglabāt informāciju par dekorēto funkciju, uzlabojot koda lasāmību un uzturēšanu.