【发布时间】:2010-11-23 03:46:20
【问题描述】:
setattr 允许您在 Python 类中动态命名属性。我正在尝试使用 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 的扩展?
标签: google-app-engine dynamic setattribute setattr listproperty