所以我在 python 中有一个对象模型。我的应用程序处于开发阶段,所以目前我可以允许不稳定的序列化格式。我想在 Python 代码中注释我的对象层次结构(如果需要)或根本不注释任何内容,允许一些 Protobuf 包装器动态地完成这一切。
在普通原型(prototype)文件中描述每个对象并保持 booth 层次结构最新是一件非常痛苦的事情。
所以我想知道是否有一种方法可以在 python 中使用 Protocol Buffers 注释\依赖于 python 代码中的反射(就像他们在 protobuf-net 中那样做一样)?
最佳答案
我遇到了类似的问题。我希望能够将对象存储在数据库中,同时使用 protobuf 将它们序列化。
我使用的方法是在 SQLAlchemy 中定义对象,然后使用 SQLAlchemy 反射(检查方法)编写 *.proto 文件生成器实用程序。
然后必须正常调用 protoc 以获得在 SQLAlchemy 对象中定义的那些的 protobuf 类。因此,每次更改 SQLAlchemy 对象定义后,我都必须调用脚本构建原型(prototype)文件并调用 protoc。这出奇地好。
我考虑的另一个选择是设计对象定义格式和可以生成 SQLAlchemy 对象和 protobuf 对象的生成器。我决定反对它,因为这种对象定义格式应该能够包含构建 SQLAlchemy 对象(索引、约束、触发器)的所有信息,这就像重新设计 SQLAlchemy 已经做得很好的东西,但你可能不需要如此丰富的对象定义和这种方法可能非常适合您。
我从 Pragmatic Programmer 一书中想到了开发自己的对象定义的想法,您可以在其中阅读更多相关信息。
关于python - 是否有用于 Python 包装器的 Protocol Buffers 允许在 Python 代码而不是 proto 文件中进行对象注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35867781/