首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中的“接口”:是还是不是?

Python中的“接口”:是还是不是?
EN

Stack Overflow用户
提问于 2009-02-16 02:15:18
回答 8查看 7.4K关注 0票数 20

因此,在静态环境中花费了大量时间之后,我开始了一个使用Python的项目。我见过一些制作“接口”的项目,这些“接口”实际上只是类,没有任何实现。以前,我会嘲笑这个想法,忽略这些项目中的这一部分。但现在,我开始热衷于这个想法了。

我们要清楚的是,Python中的接口应该是这样的:

代码语言:javascript
复制
class ISomething(object):
    def some_method():
        pass
    def some_other_method(some_argument):
        pass

请注意,您没有将self传递给任何方法,因此需要重写该方法才能调用。我认为这是一种很好的文档和完整性测试形式。

那么在座的每个人对这个想法的看法是什么?我是不是被我做过的所有C#编程洗脑了,或者这是个好主意?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-02-16 02:40:13

在某些情况下,接口可能非常方便。Twisted使fairly extensive use成为Zope interfaces的一部分,在我参与的一个项目中,Zope interface工作得非常好。Enthought的特征最近添加了interfaces,但我没有使用它们的任何经验。

不过,要注意过度使用--鸭子类型和协议是Python的一个基本方面,只有在绝对必要的情况下才使用接口。

票数 11
EN

Stack Overflow用户

发布于 2009-02-16 03:50:38

我不知道这是什么意思。接口(无论如何都是这种形式)在很大程度上是为了解决多重继承的不足。但是Python有MI,所以为什么不直接创建一个抽象类呢?

代码语言:javascript
复制
class Something(object):
    def some_method(self):
        raise NotImplementedError()
    def some_other_method(self, some_argument):
        raise NotImplementedError()
票数 29
EN

Stack Overflow用户

发布于 2009-02-16 10:47:32

在Python2.6和更高版本中,您可以使用abstract base classes。这些都很有用,因为您可以通过使用"isinstance“来测试某些东西是否实现了给定的ABC。在Python中,这个概念通常不像在严格的语言中那样严格执行,但它很方便。此外,还有用装饰器声明抽象方法的很好的惯用方法-参见上面的链接以获取示例。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/552058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档