python - 从字典创建类实例?

标签 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中删除所有冗余键,还有什么解决办法吗?

最佳答案

使用classmethod 过滤字典并返回对象。

然后您不必强制您的 __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

关于python - 从字典创建类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30113723/

相关文章:

python - 我收到 RuntimeError : dictionary changed size during iteration. Python

python - python中path/usr/share/pyshared有什么用?

python - 使用python存储matlab文件

java - 如果我的子类也有不同的方法怎么办?

java - 如何为具有未确定的 "?"值类型的 Java 通用映射添加值

c# - 使用 csvhelper 进行映射/写入协助

python - 多个组中的一个角色

python - 在 Pandas 中将数据从多行拆分为新列

java - 如何统计Java应用运行时哪个类被使用了多少次

c++ - 未定义对 ClassName::ClassName 的引用