setattr
können Sie Attribute in Python-Klassen dynamisch benennen. Ich versuche, etwas ähnliches mit einem App Engine Modell zu tun:Ist es möglich, Attribute in einem App Engine-Modell dynamisch zu benennen?
class MyModel(db.Model):
def __init__(self, *args, **kwargs):
super(MyModel, self).__init__(*args, **kwargs)
# Doesn't fully work
setatr(self, 'prop1', db.ListProperty(db.Key))
setatr(self, 'prop2', db.StringListProperty())
# Works fully
# prop1 = db.ListProperty(db.Key))
# prop2 = db.StringListProperty())
Dieser Code kompiliert, aber wenn ich model.prop1.append(key)
später anrufen, bekomme ich diesen Fehler:
AttributeError: 'ListProperty' object has no attribute 'append'
Ich vermute, das liegt daran, prop1
wird in Modellen anstelle von self.prop1
deklariert, aber ich verstehe die Bedeutung der Syntax nicht vollständig.
Hat jemand dies erreicht oder hat jemand einen Einblick in syntaktische Unterschiede?
Haben Sie eigentlich eine dynamisch hinzugefügt Festigkeitsklasse benötigen, oder ist ein expando mit setattr, was Sie suchen? –