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 -> 添加了函数,签名无关紧要。
我一直在阅读有关 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 -> 添加了函数,签名无关紧要。