使用getattr动态设置dict元素

时间:2016-12-02 11:38:50

标签: python dictionary getattr

我已经看到帖子Dynamically get dict elements via getattr?,但我无法解决问题。 我想做类似的事情,但我有点困惑。我想在相应的字典中设置(而不是获取)数据,但我有错误

  

AttributeError:type object' Dicctionary'没有属性' 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()

你能看出我做错了什么吗?因为我完全不了解。

1 个答案:

答案 0 :(得分:1)

我认为这就是你要找的东西:

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

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

这使用setattrfileDictionary分配给name.upper()上名为self的成员

问题中的代码产生的错误是因为尝试访问不存在的类上的名称而不是存在它的实例。

也可以将方法编写为:

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

这可能更接近您的尝试。

请注意,如果传递的字典发生变异,这两种行为会有所不同。第一个将对象绑定到实例上的名称。第二个用传递的字典中的项目更新现有字典。