元类会取代继承吗?
Will metaclasses replace inheritance?
我看过一些关于元类的视频和文章,IMO它们有可能取代继承并提供一种进行编译时继承的方法。
使用元类,我可以在编译期间提供接口、默认函数实现,甚至是类的实现的正确性(当然不是函数的主体(。所以在元类中有一些事情不能用继承、多态性和 OO 来完成?
作为一般评论,我作为 Python 元类的"频繁"作者写作: 元类不是用于">日常"使用的,无论元类C++可能与 Python 中的元类不同,我几乎看不到这样的概念被用来替换像继承这样常见的东西。
继承有其作用。如果需要对整个类层次结构使用特殊规则,则使用元类来指定这些规则可能会很有用。(C++提案和我浏览过的大多数解释性材料中的第一个示例是"接口"——它要求所有方法都是虚拟的(。因此,假设您在系统中的一整套类中找到了您想要的特殊规则,并且可以使用元类来表达该规则,这并不妨碍您从该元类创建单个基类,并创建具有"正常"继承的所有其他类,如果从一个这样的类到另一个类的更改只是通常的方法覆盖和专用化: 继承仍然会更简单,无论是代码,还是阅读你的代码的人,以及围绕C++在语言存在的几十年中发展的工具链回声系统。
所以,是的,元类继承可以,无论如何,允许你在元类中编码类的所有常见功能,它们只是使用此元类创建新类,而不是继承。但地球上没有这样做的动机。
回到 Python,我非常熟悉这个概念:该语言最近朝着相反的方向迈出了一步 - 通过在 3.6 版本中启用两种以前只能通过元类实现的正常继承机制,并在此过程中进一步减少了由于元类必然需要的额外复杂性而需要元类的用例。
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 如何从另一个文件继承私有成员变量和公共函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 带有继承的C++工厂
- 我应该避免多重实现继承吗
- C++继承更改成员
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 关于C++中具有多重继承"this"指针的说明
- 元类会取代继承吗?
- 是否有可能用Java接口取代C++的多重继承