Java 接口和 Python Mixin 之间的区别?

Difference between Java Interfaces and Python Mixin?

我一直在阅读有关 Python-Mixin 的文章,并了解到它为 class 添加了一些功能(方法)。同样,Java-Interfaces 也提供方法给class。

我能看到的唯一区别是 Java-interfaces 是抽象方法而 Python-Mixin 执行实现。

还有其他区别吗?

嗯,'abstract methods' 部分非常重要。

Java 是强类型的。通过在类型定义中指定接口,您可以使用它们来构造新类型的签名。在类型定义之后,您已经承诺这个新类型(或某些sub-class)最终将实现您指定的各种接口中定义的所有功能。

因此,接口实际上并没有向 class 添加任何方法,因为它不提供方法实现。它只是添加到 class 的 signature/promise。

但是,

Python 不是强类型的。类型的 'signature' 并不重要,因为它只是在 运行 时间检查您要调用的方法是否实际存在。

因此,在 Python 中,mixin 确实是关于向 class 添加方法和功能。它根本不关心类型签名。

总结:

  • Java 接口 -> 未添加功能,已扩展签名。
  • Python mixins -> 添加了函数,签名无关紧要。