为什么 protobuf 生成具有 __metaclass__ 属性的 python class?

Why protobuf generates python class with __metaclass__ attribute?

protobuf 生成 C++/Java classes,这些是静态类型 class,足够 encoding/decoding。为什么它生成具有 metaclass 属性的 python classes:我想普通的 class 就足以进行 rpc,比如C++/Java 生成 classes.

为什么 python 应该使用动态 class? 谢谢

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

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

Python 代码生成器也可以用同样的方法完成。但是,因为 Python 是一种动态语言,所以可以使用 meta类 代替。本质上,这允许大部分代码在运行时构建。元类比代码生成器更容易阅读和编辑,因为它是直接的 Python,没有难看的打印语句。

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