2008-11-17 13 views

Antwort

35

Wie in Stapel   Überlauf Frage verwiesen Inplace substitution from ConfigParser, die Sie suchen für eval():

print eval('self.post.id') # Prints the value of self.post.id 
+0

ja .. vielen Dank. –

+2

Warum nicht setattr() verwenden? – danger89

14

auch gibt es die globals() Funktion in Python, die ein Wörterbuch mit allen definierten Variablen zurückgibt. Man könnte auch so etwas wie folgt verwenden:

print globals()["myvar"] 
45

Hinweis: do nicht Verwendung eval in jedem Fall, in dem Sie den Namen eingegeben aufblicken von Benutzer eingegeben bekommen. Zum Beispiel, wenn dies von einer Webseite kommt, gibt es nichts, was jemanden daran hindern würde, einzutreten:

als das Argument. Besser ist es, auf gut definierte Nachschlagepositionen wie ein Wörterbuch oder eine Instanz unter Verwendung von getattr() zu beschränken. Um zum Beispiel den "post" Wert auf Selbst, Verwendung zu finden:

varname = "post" 
value = getattr(self, varname) # Gets self.post 

ähnlich stellt es, die Verwendung setattr():

value = setattr(self, varname, new_value) 

Um fully qualified names handhaben, wie "post.id", Sie könnten etwas wie die folgenden Funktionen anstelle von getattr()/setattr() verwenden.

def getattr_qualified(obj, name): 
    for attr in name.split("."): 
     obj = getattr(obj, attr) 
    return obj 

def setattr_qualified(obj, name, value): 
    parts = name.split(".") 
    for attr in parts[:-1]: 
     obj = getattr(obj, attr) 
    setattr(obj, parts[-1], value) 
+2

+1. Ich empfehle auf jeden Fall getattr() und setattr() – ayaz

14

Sie etwas tun könnte, wie das, was Geo empfohlen, oder gehen Sie mit:

>>> wine = 'pinot_noir' 
>>> vars()[wine] = 'yum' 
>>> pinot_noir 
'yum' 

Hinweis: vars() und Globals() gleich sind, bin ich mit Vars nur verwendet () Ich bin überrascht, dass mich niemand angerufen hat! Wie auch immer, es ist vars() und locals() das sind die gleichen.

Verwandte Themen