为什么protobuf生成带有__metaclass__属性的python类?

问题描述 投票:0回答:1

protobuf 生成 C++/Java 类,这些是静态类型类,足以用于编码/解码。为什么它生成具有 metaclass 属性的 python 类:我认为普通类足以执行 rpc,就像 C++/Java 生成的类一样。

为什么Python要使用动态类? 谢谢。

python linux class protocol-buffers
1个回答
3
投票

主要是因为它更容易阅读。

C++ 和 Java 的代码生成器确实很难理解和编辑,因为你必须同时遵循生成器代码和正在生成的代码。

Python 代码生成器可以用同样的方式完成。但是,由于 Python 是一种动态语言,因此可以使用元类来代替。本质上,这允许大多数代码在运行时构建。元类比代码生成器更容易阅读和编辑,因为它完全是直接的 Python,没有丑陋的打印语句。

现在,您可能会说 Java 可以做类似的事情:生成非常简单的类,然后使用反射来读取和写入字段。问题在于 Java 是一种编译语言。编译后的代码将比基于反射的代码执行得更好。然而,Python 不是编译的,因此使用反射方法并没有太大的损失(无论哪种方式都很慢)。事实上,因为 Python 被设计为动态的,所以你可以做很多在其他语言中不可能实现的巧妙技巧(但是,同样,无论哪种方式都很慢)。

© www.soinside.com 2019 - 2024. All rights reserved.