Wie kann ich eine Variable in einem Dekorator zu Funktion Argument in einer dekorierten Funktion übergeben?

Ich bin im Gange, um Python zu lernen. Hoffentlich zeigt mir jemand den Weg, um den Weg zu korrigieren.
Das möchte ich unten machen:

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 

Irgendeine Idee? Danke im Voraus.

2 Solutions collect form web for “Wie kann ich eine Variable in einem Dekorator zu Funktion Argument in einer dekorierten Funktion übergeben?”

Du kannst es nicht als eigenen Namen weitergeben, aber du kannst es den Stichwörtern hinzufügen.

 def decorate(function): def wrap_function(*args, **kwargs): kwargs['str'] = 'Hello!' return function(*args, **kwargs) return wrap_function @decorate def print_message(*args, **kwargs): print(kwargs['str']) 

Alternativ können Sie auch ein eigenes Argument nennen:

 def decorate(function): def wrap_function(*args, **kwargs): str = 'Hello!' return function(str, *args, **kwargs) return wrap_function @decorate def print_message(str, *args, **kwargs): print(str) 

Klassenmethode:

 def decorate(function): def wrap_function(*args, **kwargs): str = 'Hello!' args.insert(1, str) return function(*args, **kwargs) return wrap_function class Printer: @decorate def print_message(self, str, *args, **kwargs): print(str) 

Wenn Sie möchten, dass das Argument "optional-injiziert" wird, nur wenn die Funktion es tatsächlich braucht, verwenden Sie so etwas wie dieses:

 import inspect def decorate(func): def wrap_and_call(*args, **kwargs): if 'str' in inspect.getargspec(func).args: kwargs['str'] = 'Hello!' return func(*args, **kwargs) return wrap_and_call @decorate def func1(str): print "Works! - " + str @decorate def func2(): print "Should work, also." 
  • Python: Verknüpfung zum Schreiben von Dekorateuren, die Argumente akzeptieren?
  • Wie man Dekorateure aus einer Funktion in Python abstreift
  • Python profiling mit line_profiler - clever Weg, um @profile Aussagen on-the-fly zu entfernen?
  • Gibt es einen Weg, um die Funktion zu bekommen, die ein Dekorateur eingewickelt hat?
  • Überprüfen Sie, ob eine Funktion @classmethod verwendet
  • Dekorateure in der python-standard-lib (@deprecated speziell)
  • Python Dekorator optional Argument
  • Dekorateur in Python
  • Python-Dekorateur, der eine Funktion mit einem oder mehreren Argumenten zurückgibt
  • Unterschied zwischen Dekorationsklassen und Dekorationsfunktionen
  • Hat Python Dekorateure in der Standardbibliothek?
  • Python ist die beste Programmiersprache der Welt.