Sobes.tech
Junior — Middle

Koja je uloga funkcije functools.wraps pri kreiranju dekoratora u Pythonu?

sobes.tech АИ

Одговор од АИ

Funkcija functools.wraps koristi se prilikom kreiranja dekoratora u Pythonu za očuvanje metapodataka originalne funkcije koju dekorator obuhvata. Bez korišćenja wraps, ime funkcije, njena dokumentacija (doc) i drugi atributi zamenjuju se atributima unutrašnje funkcije dekoratora, što otežava otklanjanje grešaka i dokumentaciju.

Primer upotrebe:

import functools

def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("Pre poziva funkcije")
        result = func(*args, **kwargs)
        print("Posle poziva funkcije")
        return result
    return wrapper

@my_decorator
def greet(name):
    "Funkcija pozdrava"
    print(f"Zdravo, {name}!")

print(greet.__name__)  # Ispisaće 'greet', a ne 'wrapper'
print(greet.__doc__)   # Ispisaće 'Funkcija pozdrava'

Na ovaj način, functools.wraps pomaže da se sačuvaju informacije o dekorisanoj funkciji, što poboljšava čitljivost i održavanje koda.