Sobes.tech
Junior — Middle

Kokia yra funkcijos functools.wraps vaidmuo kuriant dekoratorius Python?

sobes.tech AI

Atsakymas iš AI

Funkcija functools.wraps naudojama kuriant dekoratorius Python kalboje, siekiant išsaugoti pradinės funkcijos metaduomenis, kuriuos apgaubia dekoratorius. Be wraps naudojimo, funkcijos pavadinimas, jos dokumentacija (doc) ir kiti atributai yra pakeičiami dekoratoriaus vidinės funkcijos atributais, kas apsunkina klaidų paiešką ir dokumentaciją.

Naudojimo pavyzdys:

import functools

def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("Prieš funkcijos kvietimą")
        result = func(*args, **kwargs)
        print("Po funkcijos kvietimo")
        return result
    return wrapper

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

print(greet.__name__)  # Parodys 'greet', o ne 'wrapper'
print(greet.__doc__)   # Parodys 'Pasveikinimo funkcija'

Taip, functools.wraps padeda išsaugoti dekoruotos funkcijos informaciją, kas pagerina kodo skaitomumą ir priežiūrą.