因此,在静态环境中花费了大量时间之后,我开始了一个使用Python的项目。我见过一些制作“接口”的项目,这些“接口”实际上只是类,没有任何实现。以前,我会嘲笑这个想法,忽略这些项目中的这一部分。但现在,我开始热衷于这个想法了。
我们要清楚的是,Python中的接口应该是这样的:
class ISomething(object):
def some_method():
pass
def some_other_method(some_argument):
pass
请注意,您没有将self传递给任何方法,因此需要重写该方法才能调用。我认为这是一种很好的文档和完整性测试形式。
那么在座的每个人对这个想法的看法是什么?我是不是被我做过的所有C#编程洗脑了,或者这是个好主意?
发布于 2009-02-16 02:40:13
在某些情况下,接口可能非常方便。Twisted使fairly extensive use成为Zope interfaces的一部分,在我参与的一个项目中,Zope interface工作得非常好。Enthought的特征最近添加了interfaces,但我没有使用它们的任何经验。
不过,要注意过度使用--鸭子类型和协议是Python的一个基本方面,只有在绝对必要的情况下才使用接口。
发布于 2009-02-16 03:50:38
我不知道这是什么意思。接口(无论如何都是这种形式)在很大程度上是为了解决多重继承的不足。但是Python有MI,所以为什么不直接创建一个抽象类呢?
class Something(object):
def some_method(self):
raise NotImplementedError()
def some_other_method(self, some_argument):
raise NotImplementedError()
发布于 2009-02-16 10:47:32
在Python2.6和更高版本中,您可以使用abstract base classes。这些都很有用,因为您可以通过使用"isinstance“来测试某些东西是否实现了给定的ABC。在Python中,这个概念通常不像在严格的语言中那样严格执行,但它很方便。此外,还有用装饰器声明抽象方法的很好的惯用方法-参见上面的链接以获取示例。
https://stackoverflow.com/questions/552058
复制相似问题