Sobes.tech
Junior — Middle

Mis on funktsiooni functools.wraps roll Pythonis dekoraatoreid luues?

sobes.tech AI

Vastus AI-lt

Funktsioon functools.wraps kasutatakse Pythonis dekoraatoreid loomisel, et säilitada algse funktsiooni metaandmed, mida dekorator ümbritseb. Ilma wraps kasutamiseta asendatakse funktsiooni nimi, selle dokumentatsioon (doc) ja teised atribuudid dekoratsiooni sisefunktsiooni omadustega, mis raskendab silumist ja dokumenteerimist.

Näide kasutamisest:

import functools

def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("Enne funktsiooni kutsumist")
        result = func(*args, **kwargs)
        print("Pärast funktsiooni kutsumist")
        return result
    return wrapper

@my_decorator
def greet(name):
    "Tervituse funktsioon"
    print(f"Tere, {name}!")

print(greet.__name__)  # Näitab 'greet', mitte 'wrapper'
print(greet.__doc__)   # Näitab 'Tervituse funktsioon'

Seega aitab functools.wraps säilitada teavet dekoratiivse funktsiooni kohta, parandades koodi loetavust ja hooldatavust.