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
,但我并不完全理解语法的意义。
有没有人做到这一点,或者有没有人对句法差异有任何见解?