2009-04-14 11 views
0

Durch Erstellen von Datenspeichermodellen, die von der Expando-Klasse erben, kann ich veranlassen, dass meine Modell-Entitäten/Instanzen dynamische Eigenschaften haben. Das ist großartig! Aber was ich will ist, dass die Namen dieser dynamischen Eigenschaften zur Laufzeit sind. Ist das möglich?Hinzufügen einer benutzerdefinierten Eigenschaft (zur Laufzeit) zu einer Instanz der Expando-Klasse in Google App Engine?

Zum Beispiel

class ExpandoTest (db.Expando): 
prop1 = db.StringProperty() 
prop2 = db.StringProperty() 

entity_one = ExpandoTest() 
entity_two = ExpandoTest() 

# what I do not want 
entity_one.prop3 = 'Demo of dynamic property' 

# what I want 
entity_two.<property_name_as_entered_by_user_at_runtime> = 'This 
property name was entered by the user, Great!!' 

Ist das möglich? Wenn ja, wie geht das? Ich habe schon einige lustige Wege versucht, dies zu tun, aber nicht gelingen: P

Vielen Dank im Voraus.

Antwort

0

Gerade die Lösung für meine eigene Frage gefunden. Es war wirklich einfach, aber da ich ein Python Noob bin, schrieb ich die Frage, die du oben siehst.

Für die Code-Beispiel, die ich verwendet habe, ist das, was getan werden muss:

entity_two.__setattr(some_variable, some_value) #where some_variable is populated by user at runtime :) 
+0

S.Lott's Antwort ist korrekt; Sie sollten '__setattr__' nicht direkt aufrufen. –

3

Normalerweise wir die setattr Funktion direkt verwenden.

setattr(entity_two, 'some_variable', some_value) 
Verwandte Themen