Jestem w trakcie nauki Pythona. Mam nadzieję, że ktoś wskazuje mi na poprawny sposób.
To, co chciałbym zrobić poniżej:Jak mogę przekazać zmienną w dekoratorze do argumentu funkcji w dekorowanej funkcji?
def decorate(function):
def wrap_function(*args, **kwargs):
str = 'Hello!' # This is what I want
return function(*args, **kwargs)
return wrap_function
@decorate
def print_message():
# I'd like to pass 'str' as mentioned above
# to any functions' argument like below:
print(str) # 'str' is same as above
jakiś pomysł? Z góry dziękuję.
Zauważ, że pierwsze rozwiązanie jest również osiągnięte przez użycie 'functools.partial()' (ale tylko z wersji 2.6). Ten sam moduł oferuje również funkcję 'wraps()', która może być używana z dekoratorami w celu zachowania nazwy i dokumentu oryginalnej funkcji. – RedGlyph
@RedGlyph: dlaczego używamy 'functools.partial()' tylko z wersji 2.6? dokumentacja nic nie mówi, poza tym, że moduł functools jest nowy w pyhtonie 2.5. –
Podziękowania dla Tora Valamo. Alternatywne rozwiązanie jest dla mnie jasne. Ale co powiesz na to, czy dekorowana funkcja jest metodą instancji? Argument metody instancji powinien wyglądać tak: 'def print_message (str, self, * args, ** kwargs):' Czy to jest poprawne? Dzięki jeszcze raz. – Japboy