Я создаю простой API, который создает типизированные классы на основе данных JSON, в которых определено обязательное поле типа. Эта строка используется для определения нового типа, добавления полей в объект JSON, создания его экземпляра и заполнения полей в экземпляре.
Что я хочу сделать, так это разрешить возможность предопределения этих типов в любом приложении, использующем мой модуль. Это позволяет добавлять методы и другие специфичные для приложения атрибуты, отсутствующие в объекте JSON. Я хотел бы, чтобы мой модуль проверил, существует ли тип, и если он есть, используйте его вместо динамического создания типа. Он по-прежнему будет добавлять атрибуты из объекта JSON, но он будет перерабатывать существующий тип.
Мои данные JSON:
{
"type": "Person",
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
Мой код на данный момент (предположим, что json_object на данный момент является диктом):
if not json_object.has_key('type'):
raise TypeError('JSON stream is missing a "type" attribute.')
##### THIS IS WHERE I WANT TO CHECK IF THE TYPE BY THAT NAME EXISTS ALREADY ####
# create a type definition and add attributes to it
definition = type(json_object['type'], (object,), {})
for key in json_object.keys():
setattr(definition, key, None)
# instantiate and populate a test object
tester = definition()
for key, value in json_object.iteritems():
setattr(tester, key, value)