setattr
允许您在Python类中动态命名属性。我试图做一个App Engine型号类似的东西:是否可以在App Engine模型中动态命名属性?
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())
此代码编译,但是当我后来打电话model.prop1.append(key)
,我得到这个错误:
AttributeError: 'ListProperty' object has no attribute 'append'
我怀疑这是因为prop1
在模型中声明,而不是self.prop1
,但我不完全理解语法的意义。
有没有人完成过这个任务,或者没有人对语法差异有所了解?
你确实需要一个动态添加的属性类,或者是与SETATTR你在找什么在Expando? – 2010-11-24 04:07:17