Verwenden Sie String Variable ** Kwargs als benanntes Argument

Ich versuche, einen Weg zu finden, um eine Json-Konfigurationsdatei zu durchlaufen und einen Schlüsselnamen als Argumentnamen zu einer Methode zu verwenden, die ** Kwargs verwendet. Ich habe eine Json-Konfigurationsdatei erstellt und Schlüsselnamen als Methoden verwendet. Ich gebe einfach "set_" an den Schlüsselnamen, um die richtige Methode aufzurufen. Ich konvertiere die Json in ein Wörterbuch, um eine der Standardwerte zu durchlaufen. Ich möchte Argumentnamen zu ** kwargs durch eine Stringvariable übergeben. Ich habe versucht, ein Wörterbuch zu übergeben, aber es scheint nicht so zu sein.

user_defaults = config['default_users'][user] for option_name, option_value in user_defaults.iteritems(): method = "set_" + option_name callable_method = getattr(self, method) callable_method(user = user, option_name = user_defaults[option_name]) 

Das Aufrufen der callable_method oben übergibt "option_name" als den tatsächlichen Namen des kwargs. Ich möchte es so weitergeben, dass wenn "shell" = option_name, dass es als String-Name für den Argumentnamen übergeben wird. Ein Beispiel ist unten. Auf diese Weise kann ich durch irgendwelche Schlüssel in der config und keine Sorgen darüber, was ich suche in einer Methode, die ich schreibe, um etwas zu erreichen.

 def set_shell(self, **kwargs): user = kwargs['user'] shell = kwargs['shell'] ## Do things now with stuff 

Jede Hilfe wird geschätzt, ich bin neu in Python und immer noch lernen, wie man Dinge tun, die pythonischen Weg.

One Solution collect form web for “Verwenden Sie String Variable ** Kwargs als benanntes Argument”

Wenn ich richtig verstehe, was du fragst, kannst du einfach die ** Syntax auf der anrufenden Seite benutzen, um ein Dict zu übergeben, das in kwargs umgewandelt wird.

 callable_method(user=user, **{option_name: user_defaults[option_name]}) 
  • Beschleunigen Sie eine einzelne Aufgabe mit Multi-Processing oder Threading
  • Fehler bei der Verwendung von QUOTE_NONE, um Felder beim Schreiben in csv niemals zu zitieren
  • Wie lese ich mehrere Wörterbücher aus einer Datei in Python?
  • Liste zum verschachtelten Wörterbuch in python
  • Sende POST-Daten in Eingabeform und Schrott-Seite, Python, Requests-Bibliothek
  • Rekursiv alle Dateien und Ordner auf 777 aus dieser Liste
  • PyPy findet kein Modul aus nur * .pyc Dateien
  • Arbeit mit Chinesen in Python
  • Python urllib2 oder Anfragen nach Methode [duplizieren]
  • Gunicorn scheitert bei der Verwendung von WSGI
  • Fehler bei der Installation von scipy auf Windows
  • Python ist die beste Programmiersprache der Welt.