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: Dekorieren einer Klassenmethode, die bei der Vererbung überschrieben werden soll
  • Identifizieren von äquivalenten varargs-Funktionsaufrufen zur Speicherung in Python
  • Dekorateur und Verschlüsse
  • Finden Sie die Parameter einer Funktion in Python
  • Zugriff auf original dekorierte Funktion für Testzwecke
  • Wie man eine Klasse automatisch registriert, wenn sie definiert ist
  • Wie man dynamische Daten an Dekorateure weitergibt
  • Python-Schließfunktion, die den äußeren variablen Zugriff verliert
  • Python-Dekorator automatisch definieren __init__ Variablen
  • Hinzufügen von Testmethoden dynamisch mit Dekorateur
  • Toggling decorators
  • Python ist die beste Programmiersprache der Welt.