【发布时间】:2011-05-31 17:53:20
【问题描述】:
灵感来自 here. 的一个好问题(和一堆好答案)
“针对接口而不是对象的代码”语句在 Python 中是否有任何意义?
我正在寻找类似于Original Question 中的答案,但需要使用 Python sn-ps 和想法。
【问题讨论】:
-
只是不要认为 interface 与 Java 或 C# 中的 interface 含义相同。它可以应用于任何面向对象的语言,但可能以不同的方式应用。也许你不能在代码中强制执行它,但这个概念本身仍然适用。
-
不,python 没有接口。直到最近它还没有抽象类。即便如此,两者都不是必需的。在 python 中为接口编码没有意义,因为您不必在分配或使用变量之前声明它的类型。
-
@Falmarri:在某种程度上,如果您依赖鸭子类型,您可以针对界面执行代码。因为你假设例如传递给您的方法的对象具有方法 A、B 和 C,您不关心其他任何事情。您只是无法通过代码强制执行此操作。至少,我是这么看的,但也许这是一个过于哲学或意识形态的讨论;)
-
@Felix:是的,这就是语言的作用。但是您没有针对接口进行编码,因为没有接口。在 Java 中针对接口进行编码可确保实现该接口的类型的对象具有这些方法。这在 python 中是不保证的。
-
@Falmarri:当然不能保证,当然没有 Python 相当于“接口”作为“关于成员的静态检查合同”。但是在类型系统之外,在常规级别上,我们确实使用了可以称为“接口”的东西 -
map期望一个可调用和可迭代的,而不是从假设的FunctionClass或BaseIterable派生的东西。这只是隐含的。
标签: python oop interface inversion-of-control