元类会取代继承吗?

Will metaclasses replace inheritance?

本文关键字:继承 取代      更新时间:2023-10-16

我看过一些关于元类的视频和文章,IMO它们有可能取代继承并提供一种进行编译时继承的方法。

使用元类,我可以在编译期间提供接口、默认函数实现,甚至是类的实现的正确性(当然不是函数的主体(。所以在元类中有一些事情不能用继承、多态性和 OO 来完成?

作为一般评论,我作为 Python 元类的"频繁"作者写作: 元类不是用于">日常"使用的,无论元类C++可能与 Python 中的元类不同,我几乎看不到这样的概念被用来替换像继承这样常见的东西。

继承有其作用。如果需要对整个类层次结构使用特殊规则,则使用元类来指定这些规则可能会很有用。(C++提案和我浏览过的大多数解释性材料中的第一个示例是"接口"——它要求所有方法都是虚拟的(。因此,假设您在系统中的一整套类中找到了您想要的特殊规则,并且可以使用元类来表达该规则,这并不妨碍您从该元类创建单个基类,并创建具有"正常"继承的所有其他类,如果从一个这样的类到另一个类的更改只是通常的方法覆盖和专用化: 继承仍然会更简单,无论是代码,还是阅读你的代码的人,以及围绕C++在语言存在的几十年中发展的工具链回声系统。

所以,是的,元类继承可以,无论如何,允许你在元类中编码类的所有常见功能,它们只是使用此元类创建新类,而不是继承。但地球上没有这样做的动机。

回到 Python,我非常熟悉这个概念:该语言最近朝着相反的方向迈出了一步 - 通过在 3.6 版本中启用两种以前只能通过元类实现的正常继承机制,并在此过程中进一步减少了由于元类必然需要的额外复杂性而需要元类的用例。