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)
ja .. vielen Dank. –
Warum nicht setattr() verwenden? – danger89