質問
辞書から値をアンパックしてインスタンス変数に割り当てるために使用できる組み込み関数/演算子はありますか?
これは私がやろうとしていることです:
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()
に似た何かで、別の辞書から値をロードしますが、プレーンオブジェクト/クラスインスタンス用ですか?
解決
dの項目をループ処理する別の方法もあります。これには、 c .__ dict __
に保存されるという前提がありません。これは常に正しいとは限りません。
d = {'bar': 456}
for key,value in d.items():
setattr(c,key,value)
または myClass
の一部として update
メソッドを記述して、 c.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''.
他のヒント
試しましたか
f.__dict__.update( b )
?
また、多分、dictのupdateメソッドの周りにラッパーがあるのが良いスタイルでしょう:
def update(self, b):
self.__dict__.update(b)
PS:@ S.Lott の投稿にコメントしないで申し訳ありませんが、私は持っていませんまだ担当者。
次のことを試してください:
def to_object(my_object, my_dict):
for key, value in my_dict.items():
attr = getattr(my_object, key)
if hasattr(attr, '__dict__'):
to_object(attr, value)
else:
setattr(my_object, key, value)
obj = MyObject()
data = {'a': 1, 'b': 2}
to_object(obj, data)
所属していません StackOverflow