为什么我们不需要动态语言的界面?

2022-09-02 20:31:46

仅仅是因为动态类型,我们不需要python中的接口概念(如Java和C#)吗?


答案 1

Java1 引入了作为关键字和工件(C# 从那里开始),以描述对象必须遵守的契约是什么。interface

但是,接口一直是面向对象范式的关键部分,基本上它代表了对象必须响应的方法。Java只是强制执行此机制以提供静态类型检查。

因此,动态(OO)编程语言确实使用接口,甚至认为它们不会静态检查它们。就像其他数据类型一样,例如在Ruby中:

 @i = 1;

您不必声明类型,只需使用它即可。接口也是如此,它们只是流动。权衡是,您不能对此进行静态检查,并且故障仅在运行时显示。iFixNum

另一方面,结构类型(或我称之为:P的静态鸭子类型)被Go或Scala语言使用,给出了两全其美。

1. 参见 Daniel Earwicker 关于 CORBA 界面关键字的评论


答案 2

我们不需要它们,但我们确实支持它们。查看Zope接口(它可以在Zope之外使用)。