31

ディクショナリから値を解凍してインスタンス変数に割り当てるために使用できる組み込みの関数/演算子はありますか?

これは私がやろうとしていることです:

c = MyClass()
c.foo = 123
c.bar = 123

# c.foo == 123 and c.bar == 123


d = {'bar': 456}
c.update(d)

# c.foo == 123 and c.bar == 456

別のディクショナリから値をロードするディクショナリに似てupdate()いますが、プレーンオブジェクト/クラスインスタンス用ですか?

4

4 に答える 4

48

dの項目をループすることによってそれを行う別の方法もあります。これは、それらが格納されるのと同じ仮定を持っていませんが、c.__dict__常に正しいとは限りません。

d = {'bar': 456}
for key,value in d.items():
    setattr(c,key,value)

または、期待どおりに機能するようにupdate、の一部としてメソッドを作成することもできます。MyClassc.update(d)

def update(self,newdata):
    for key,value in newdata.items():
        setattr(self,key,value)

setattrのヘルプを確認してください

setattr(...)
    setattr(object, name, value)
    Set a named attribute on an object; setattr(x, 'y', v) is equivalent to
    ''x.y = v''.
于 2009-01-02T21:02:16.900 に答える
36

やってみました

f.__dict__.update( b )

于 2009-01-01T21:14:32.347 に答える
9

また、dictのupdateメソッドのラッパーを使用するのも良いスタイルかもしれません。

def update(self, b):
    self.__dict__.update(b)

PS:@ S.Lottの投稿にコメントしなかったことをお詫びしますが、まだ担当者がいません。

于 2009-01-01T21:21:15.233 に答える