setattr
позволяет динамически определять атрибуты в классах Python. Я пытаюсь сделать что-то подобное с Engine Model App:Можно ли динамически назвать атрибуты в модели 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
, но я не совсем понимаю значение синтаксиса.
Кто-нибудь это сделал, или кто-нибудь знает о синтаксических различиях?
вам действительно нужен динамически добавляемый класс собственности, или являются Expando с SetAttr, что вы ищете ли? – 2010-11-24 04:07:17