Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中扩展protobuf对象_Python_Python 3.x_Design Patterns_Protocol Buffers_Grpc Python - Fatal编程技术网

如何在python中扩展protobuf对象

如何在python中扩展protobuf对象,python,python-3.x,design-patterns,protocol-buffers,grpc-python,Python,Python 3.x,Design Patterns,Protocol Buffers,Grpc Python,我已经定义了一个protobuf消息,我想为它创建一个包装器/代理/样板/扩展/任何东西,以便添加自定义方法 protobuf的文档说,建议您不要直接从protobuf继承,因为它实际上是一个描述符和元类,定义了大多数方法/属性 我想知道,当继承不是一个稳定的选项时,人们如何尽可能地“继承”一个类,或者是否有人有幸使用protobuf codegen来扩展/定义自定义消息类,以及这是否是一个合理的想法。从未使用protobuf,而且不知道python的dir函数是否能在上面工作。但如果是这样,你

我已经定义了一个protobuf消息,我想为它创建一个包装器/代理/样板/扩展/任何东西,以便添加自定义方法

protobuf的文档说,建议您不要直接从protobuf继承,因为它实际上是一个描述符和元类,定义了大多数方法/属性


我想知道,当继承不是一个稳定的选项时,人们如何尽可能地“继承”一个类,或者是否有人有幸使用protobuf codegen来扩展/定义自定义消息类,以及这是否是一个合理的想法。

从未使用protobuf,而且不知道python的
dir
函数是否能在上面工作。但如果是这样,你可以这样做:

class A:
    def app(self):
        print("app")
    def bla(self):
        print("bla")

class wrapperA:
    def __init__(self,a):
        self.dict_of_functions = {x:getattr(a, x) for x in dir(A)}
    def funcA(self, func_name):
        return self.dict_of_functions[func_name]()
    
a = A()
wa = wrapperA(a)
for x in ["app", "bla"]:
    wa.funcA(x)

手册建议您制作一个包装器我想更确切地说,我正在寻找“呈现”为protobuf的东西,这样我就可以运行
instanceof
和内置protobuf方法。当然,您可以通过编写代理手动完成这项工作,但我想知道是否有一种更自动的方式来完成这项工作,而无需逐个方法地定义样板文件。