2016-12-02 6 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() 

あなたは私が間違ってやっているかを見ることができますか?私は完全にそれを理解していないので。

+0

私はあなたがしたいと思うのは 'dictionary = getattr(methodCaller、name.upper())'ですが、正確に何を達成したいのか分かりません。 – ettanany

+0

エラーを引き起こす行や、エラーを再現するのに十分なコード、結果/出力を表示していないことを示していません。 – martineau

答えて

1

私は、これはあなたが探しているものだと思い:

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を使用しています結果は、存在するインスタンスではなく、存在しないクラスの名前にアクセスしようとすることによるものです。あなたがしようとしていたものに近いかもしれません

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

のようにメソッドを書くことも可能です。

渡された辞書が変更されている場合、これらの2つの動作が異なることに注意してください。最初はオブジェクトをインスタンス上の名前にバインドします。 2番目は、渡された辞書の項目で既存の辞書を更新します。

関連する問題