Sobes.tech
Junior — Middle

Jaka jest rola funkcji functools.wraps przy tworzeniu dekoratorów w Pythonie?

sobes.tech AI

Odpowiedź od AI

Funkcja functools.wraps jest używana podczas tworzenia dekoratorów w Pythonie, aby zachować metadane oryginalnej funkcji, którą dekorator opakowuje. Bez użycia wraps, nazwa funkcji, jej dokumentacja (doc) i inne atrybuty są zastępowane przez atrybuty funkcji wewnętrznej dekoratora, co utrudnia debugowanie i dokumentację.

Przykład użycia:

import functools

def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("Przed wywołaniem funkcji")
        result = func(*args, **kwargs)
        print("Po wywołaniu funkcji")
        return result
    return wrapper

@my_decorator
def greet(name):
    "Funkcja powitania"
    print(f"Cześć, {name}!")

print(greet.__name__)  # Wyświetli 'greet', a nie 'wrapper'
print(greet.__doc__)   # Wyświetli 'Funkcja powitania'

W ten sposób, functools.wraps pomaga zachować informacje o dekorowanej funkcji, co poprawia czytelność i utrzymanie kodu.