문제
사전에서 값을 풀고 인스턴스 변수에 할당하는 데 사용할 수있는 내장 기능/연산자가 있습니까?
이것이 제가하려는 일입니다.
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)
추신 : @에서 댓글을 달지 않아서 죄송합니다.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