Доступ к атрибутам с помощью оператора точки для объектов, созданных с использованием класса модели дуршлаг
Я хочу знать, есть ли способ получить доступ к объектам, созданным с использованием любого класса Colander Model, с помощью оператора точки.
Пример:
class Image(colander.MappingSchema):
url = colander.SchemaNode(colander.String())
width = colander.SchemaNode(colander.Int())
height = colander.SchemaNode(colander.Int())
Итак, используя эту модель, если я десериализую строку JSON,
image = Image.deserialize("{'url':'xyz', 'width':10, 'height':12}")
Я хочу получить доступ к атрибутам модели Image с помощью оператора точка (.).
Подобно,
image.url
image.width
image.height
И эти атрибуты должны быть доступны в качестве предложения по завершению кода IDE, как только они станут доступны с помощью оператора точки.
Цель этого - помочь клиентам легко получить атрибуты модели, не заглядывая в модель.
1 ответ
Я думаю, вы могли неправильно понять, что здесь делает десериализация. Кроме того, ваш пример кода выглядит неправильно для меня, поскольку десериализация ожидает словарь, похожий на объект, а не строку.
Тем не менее, чтобы ответить на ваш первоначальный вопрос, ответ - нет, вы не можете использовать оператор точки. Причина этого заключается в том, что десериализация ввода фактически возвращает вам словарь, а не объект типа Image
, См документацию дуршлаг о десериализации
Итак, взяв ваш пример и исправив его, вы получите что-то вроде этого:
class Image(colander.MappingSchema):
url = colander.SchemaNode(colander.String())
width = colander.SchemaNode(colander.Int())
height = colander.SchemaNode(colander.Int())
image = Image().deserialize({'url':'xyz', 'width':'10', 'height':'12'})
Дадим вам следующее, если вы напечатаете и напечатаете переменную image
>>> type(image)
dict
>>> print(image)
{
'url': 'xyz',
'height': 12,
'width': 10
}
Обратите внимание на приведение числовых значений строки к целым числам.