我想知道是否有一种方法可以使用点运算符访问使用任何漏斗模型类创建的对象。
示例:
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}")我想使用dot (.)操作符。
喜欢,
image.url
image.width
image.height一旦可以使用点运算符访问IDE代码完成建议,这些属性就应该可用。
这样做的目的是帮助客户端在不查看模型的情况下轻松获取模型属性。
发布于 2018-03-12 05:41:55
我想你可能误解了,反序列化在这里做了什么。另外,你的代码示例在我看来是错误的,因为反序列化需要一个类似字典的对象,而不是一个字符串。
然而,为了回答你最初的问题,答案是不,你不能使用点运算符。这样做的原因是,反序列化输入实际上会返回一个字典,而不是Image类型的对象。See colander's documentation about deserialization
所以以你的例子为例,并纠正它,你会得到如下所示:
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
}请注意将字符串数值转换为整数。
https://stackoverflow.com/questions/47116855
复制相似问题