从字典创建类实例?

Dem*_*nov 6 python dictionary sqlalchemy class

我试图从字典创建类实例,其中包含多个类具有属性的键.我已经从这个链接读了相同问题的答案:从字典创建类实例属性?.问题是我无法__init__在我想要的类定义中编写,因为我使用的是SQLAlchemy声明式样式类定义.还会type('className', (object,), dict)创建不需要的错误属性.这是我找到的解决方案:

dict = {'key1': 'value1', 'key2': 'value2'}
object = MyClass(**dict)
Run Code Online (Sandbox Code Playgroud)

但是如果dict有冗余密钥,它就不起作用:

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

除了直接删除所有冗余密钥外,还有其他解决方案dict吗?

Pau*_*ney 9

使用a 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
Run Code Online (Sandbox Code Playgroud)