Объект обновления Python из словаря
-
03-07-2019 - |
Вопрос
Есть ли встроенная функция/оператор, которую я мог бы использовать для распаковки значений из словаря и присвоения их переменным экземпляра?
Вот что я собираюсь сделать:
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)
или вы могли бы написать update
метод как часть MyClass
так что 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:
def update(self, b):
self.__dict__.update(b)
ПС:Извините, что не комментирую @С.Лотт пост, но у меня пока нет представителя.
Вы можете попробовать сделать:
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)