クラスにプロパティを動的に追加するにはどうすればよいですか?

| | |

目標は、db結果セットのように動作するモッククラスを作成することです。

たとえば、データベースクエリが戻った場合、dict式を使用して {"ab":100、 "cd":200} の場合、次のように表示します:

 >>>ダミー.ab100 

最初は、この方法でできるのではないかと思いました。

  ks = ["ab"、 "cd"] vs = [12、34]クラスC(dict):def __init __(self、ks、vs):for i、k in enumerate(ks):self [k] = vs [i] setattr(self、k、property(lambda x :vs [i]、self.fn_readyonly))def fn_readonly(self、v)raise "It is ready only" if __name__ == "__main __":c = C(ks、vs)print c.ab  

ただし、 c.abは代わりにプロパティオブジェクトを返します。

setattr行をk= property(lambda)に置き換えます。 x:vs [i])はまったく役に立ちません。

では、実行時にインスタンスプロパティを作成する正しい方法は何ですか?

PS私は知っています __ getattribute__メソッドで提示された代替案の例使用しましたか?