문제

사전에서 값을 풀고 인스턴스 변수에 할당하는 데 사용할 수있는 내장 기능/연산자가 있습니까?

이것이 제가하려는 일입니다.

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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top