setattr
Pythonクラスの属性に動的に名前を付けることができます。AppEngineモデルで同様のことをしようとしています。
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
だと思いますが、構文の重要性を完全には理解していません。
誰かがこれを達成しましたか、または誰かが構文の違いについて何か洞察を持っていますか?