首页 > 解决方案 > 如何在 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 消息。

标签: pythongrpc

解决方案


IIUC,这是不鼓励的。

Protobuf 文件定义客户端和服务器之间的合同。在一种实现中任意向消息添加字段可能会破坏合同。

如果 process 属性应该是消息的一部分(即暴露给其他实现合同的客户端和服务器),那么您应该在 protobuf 消息中添加一个字段并重新生成代码。

如果您想在代码中创建消息的内部表示作为实现细节,那么您应该考虑创建一个新的 Python 类并实现在它和 protoc 生成的类之间进行转换的方法。


推荐阅读