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

Я пытаюсь создать экземпляр класса из словаря, у которого есть ключи, более чем у класса есть атрибуты. Я уже читал ответы по одному и тому же вопросу по этой ссылке: Создание свойств экземпляра класса из словаря? , Проблема в том, что я не могу писать __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 } 
  • Отключение экземпляра SQLAlchemy, поэтому обновление не происходит
  • Преобразование объекта строки sqlalchemy в python dict
  • Выберите как в sqlalchemy
  • Как класс SQLAlchemy наследуется должным образом, несмотря на сложность отношений ForeignKey?
  • Как поместить метку SQLAlchemy в результат арифметического выражения?
  • SQLAlchemy __init__ не работает
  • Объект 'Engine' не имеет атрибута 'drivername'
  • Как реализовать версию, поддерживающую только приложение, в SQLAlchemy
  • AttributeError: объект 'int' не имеет атрибута '_sa_instance_state'
  • SQLAlchemy: удаление каскада
  • Правильный способ предотвратить повторение запросов SQLAlchemy на истекших объектах?
  •  
    Interesting Posts for Van-Lav

    Использование Pre_delete Signal в django

    Захват вывода журнала движка Google

    Чтение строк из текстового файла в python (windows)

    Использование импорта pyobjc в PyDev в Eclipse на Mac OS X

    как перезагрузить модуль cython в интерактивном режиме с помощью pyximport

    Селену требуется много времени, чтобы найти элемент. Есть ли что-то, что я могу сделать?

    Разница в результатах GLM между iPython и R

    SymPy: создание функции numpy из диагональной матрицы, которая принимает массив numpy

    python – как проверить, является ли переменная «gtk.gdk.PixbufLoader»?

    Почему Django 1.9 заменил кортежи () списками в настройках и URL-адресах?

    RuntimeError: основной поток не находится в основном цикле

    Манипуляция списком в Python с pop ()

    распознавание речи уменьшает возможные результаты поиска

    Почему XGrabKey генерирует дополнительные фокусы и фокус-события?

    Работа Django makemigrations работает, миграция завершается неудачей с помощью «django.db.utils.IntegrityError: NOT NULL constraint failed"

    Python - лучший язык программирования в мире.