Создание экземпляра класса из словаря?

Я пытаюсь создать экземпляр класса из словаря, у которого есть ключи, более чем у класса есть атрибуты. Я уже читал ответы по одному и тому же вопросу по этой ссылке: Создание свойств экземпляра класса из словаря? , Проблема в том, что я не могу писать __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 Solutions collect form web for “Создание экземпляра класса из словаря?”

Используйте classmethod чтобы отфильтровать dict и вернуть объект.

Вам тогда не нужно принудительно __init__ метод __init__ для принятия dict.

 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 

Другое решение – Filter dict, чтобы содержать только определенные клавиши :

 dict_you_want = { your_key: dict[your_key] for your_key in your_keys } 
Python - лучший язык программирования в мире.