从字典创建类实例?

时间:2015-05-08 00:12:33

标签: python class dictionary sqlalchemy

我正在尝试从字典创建类实例,其中包含多个类的键具有属性。我已经通过以下链接阅读了相同问题的答案:Creating class instance properties from a dictionary?。问题是我无法在我想要的类定义中编写__init__,因为我正在使用SQLAlchemy声明式样式类定义。此外,type('className', (object,), dict)会创建不需要的错误属性。 这是我找到的解决方案:

dict = {'key1': 'value1', 'key2': 'value2'}
object = MyClass(**dict)

但如果dict有冗余密钥则无效:

dict = {'key1': 'value1', 'key2': 'value2', 'redundant_key': 'redundant_value'}
object = MyClass(**dict) # here need to ignore redundant_key

除了从dict直接删除所有冗余密钥以外,是否有任何解决方案?

2 个答案:

答案 0 :(得分:8)

使用classmethod过滤dict并返回对象。

然后,您不必强迫__init__方法接受词典。

import itertools

class MyClass(object):
    @classmethod
    def fromdict(cls, d):
        allowed = ('key1', 'key2')
        df = {k : v for k, v in d.iteritems() if k in allowed}
        return cls(**df)

    def __init__(self, key1, key2):
        self.key1 = key1
        self.key2 = key2

dict = {'key1': 'value1', 'key2': 'value2', 'redundant_key': 'redundant_value'}

ob = MyClass.fromdict(dict)

print ob.key1
print ob.key2

答案 1 :(得分:1)

另一个解决方案是Filter dict to contain only certain keys

dict_you_want = { your_key: dict[your_key] for your_key in your_keys }