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'
私はこれがあるためである疑いがありますself.prop1
の代わりにprop1
がモデルで宣言されていますが、構文の重要性は十分に理解されていません。
誰でもこれを達成しましたか、誰でも構文上の違いについて洞察していますか?
は、あなたが実際にあなたが探しているものを動的に追加プロパティクラスを必要とする、またはSETATTRとはExpandoありますか? –