python 棉花糖_在Python中结合棉花糖模式定义和OO的最佳实践是什么?

假设在棉花糖中定义了一个简单的模式class AddressSchema(Schema):

street=fields.String(required=True)

city=fields.String(required=True)

country=fields.String(default='USA')

class PersonSchema(Schema):

name=fields.String(required=True)

address=fields.Nested(AddressSchema())

这里的用例是应用程序使用内存中的对象,并序列化/反序列化为JSON,即没有SQL数据库。在

使用标准的json库,我可以解析符合此模式的JSON对象,并以person1['address']['city']等方式访问对象,但是在冗长的语法中使用容易出错的字符串有些令人不满意。在

手工制作的OO模型

我可以定义一个并行的OO模型,并用@post_load修饰符注释我的模式,例如:

^{pr2}$

但是重复不是很好(我甚至没有在模式中包含描述)。在

无OO模型

可以说,显式的OO模型并不能买到很多东西——它只是基本的数据访问器,而不是行为。我可以用jsobject得到一些语法糖,这样我就可以写例如person1.address.city。但这似乎也不太正确。作为一个开发人员,我没有明确的python类API来确定要使用哪些字段,我可以引用marshmallow模式,但这感觉非常间接。在

代码生成

从marshmallow模式定义生成上面的OO代码是相当容易的。我很惊讶似乎没有这样的图书馆。也许代码生成被认为是非常不和谐的?当然,它只适用于数据访问样式的类定义;添加非泛型行为将是严格禁止的

对于代码的用户来说,他们不需要知道使用了codegen方法——所有的东西都有一个显式的API,文档与readthedocs中的其余代码一起可见

动态类

另一种方法是从棉花糖定义中派生出动态类。同样,据我所知,没有这样的库(尽管python中的动态类生成方法的范围令人印象深刻,但我可能遗漏了一些)。可以说,这并不能比jsobjects方法买得多,但可能有一些优点——可以将它与一些具有定义行为的显式代码交织在一起。动态方法的缺点是在Python世界中显式方法比隐式方法更受青睐。在

什么是最Python?在

这里缺少图书馆意味着我要么找不到东西,要么没有以一种适当的Python式的方式来看待这个问题。我很高兴能为pypi贡献一些东西,但是在添加另一个metaoo库之前,我想确定我已经在这里做了尽职调查。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值