python - 如何在 Python gRPC 中扩展消息?
问题描述
我想知道。如何在 Python gRPC 中扩展消息?我的意思是,为消息添加一个附加属性。例如。我有名为 PID 的 gRPC 消息。我想将属性添加到这条名为 process 的消息中。我试图通过添加此代码来做到这一点,__init__.py
但我得到了一个感觉
AttributeError:“PID”对象没有属性“__process”
def __init(self, *args, **kwargs):
if 'process' in kwargs:
self.__process = kwargs['process']
del kwargs['process']
self.__base_init(*args, **kwargs)
PID.__process = None
PID.__base_init = PID.__init__
PID.__init__ = __init
如何在不编辑 .proto 文件的情况下将进程属性添加到 gRPC 消息。
解决方案
IIUC,这是不鼓励的。
Protobuf 文件定义客户端和服务器之间的合同。在一种实现中任意向消息添加字段可能会破坏合同。
如果 process 属性应该是消息的一部分(即暴露给其他实现合同的客户端和服务器),那么您应该在 protobuf 消息中添加一个字段并重新生成代码。
如果您想在代码中创建消息的内部表示作为实现细节,那么您应该考虑创建一个新的 Python 类并实现在它和 protoc 生成的类之间进行转换的方法。
推荐阅读
- php - PHP -- 输出到大文本文件很慢并且可能导致服务器错误
- javascript - ajaxStart - 更改显示并不总是有效
- jquery - Bootstrap datepicker 根据其他日期输入设置最大值和最小值
- mysql - Spring Boot:找到对集合错误的共享引用
- javascript - momentjs - 创建最近 30 天的数组
- xml - 使用 DITA-OT 在 Eclipse InfoCenter TOC 中设置顶级链接
- r - 使用 R 完成 Web 表单
- javascript - 如何在移动视图中点击箭头时左右滚动内容?
- python - 如何使用 Jira REST API 从问题中删除截止日期
- c++ - 指针数组的分段错误