2016-12-02 3 views
-1

이미 게시물 Dynamically get dict elements via getattr?이 표시되어 있지만 문제를 해결할 수 없습니다. 나는 비슷한 것을하고 싶지만 조금 혼란 스럽다. 나는 상대 사전에 (하지) 데이터를 설정하려는, 그러나 나는 오류가getattr을 사용하여 dict 요소를 동적으로 설정하십시오.

AttributeError: type object 'Dicctionary' has no attribute 'VERBS'.

내 코드는 다음과 같습니다

class Dicctionary: 
    def __init__(self): 
     self.VERBS = dict() 
     self.REFERENCER = dict() 

    def setDictionary(self, fileDictionary, name): 
     methodCaller = Dicctionary() 
     dictionary = "self."+name.upper() 
     dictionary = getattr(Dicctionary, name.upper()) 
     dictionary = fileDictionary.copy() 

당신은 내가 잘못 뭘하는지 볼 수 있을까요? 왜냐하면 나는 그것을 완전히 이해하지 못하기 때문입니다.

class Dicctionary: 
    def __init__(self): 
     self.VERBS = dict() 
     self.REFERENCER = dict() 

    def setDictionary(self, fileDictionary, name): 
     setattr(self, name.upper(), fileDictionary) 

이 질문의 코드가 가지고있는 self

에 이름 name.upper()으로 회원에게 오류를 fileDictionary을 할당 setattr을 사용

+0

당신이하고 싶은 것은'dictionary = getattr (methodCaller, name.upper())'라고 생각하지만 정확하게 달성하기를 원하는지 이해하지 못합니다. – ettanany

+0

오류를 일으킨 행이 무엇인지, 오류를 다시 작성하기에 충분한 코드 또는 원하는 결과/결과를 표시하지 않았습니다. – martineau

답변

1

나는 이것이 당신이 찾고있는 무엇이라고 생각 존재하는 인스턴스가 아닌 존재하지 않는 클래스의 이름에 액세스하려고 시도한 결과. 당신이 시도하고 있었는지에 가까운 수 있습니다

def setDictionary(self, fileDictionary, name): 
    dictionary = getattr(self, name.upper()) 
    dictionary.update(fileDictionary) 

:

이 같은 방법을 작성하는 것도 가능합니다.

전달 된 사전이 변경되면이 두 가지 동작이 다르게 적용됩니다. 첫 x 째는 오브젝트를 인스턴스의 이름에 바인드합니다. 두 번째는 전달 된 사전의 항목으로 기존 사전을 업데이트합니다.