在Python中创建接口和可交换实现
在Python中,能否创建一个类的接口,并且有不同的实现方式呢?
举个例子:我想创建一个用于POP3访问的类(包括所有的方法等等)。如果我选择一个商业组件,我想把它封装起来,以符合某种约定。
将来,如果我想使用另一个组件或者自己编写代码,我希望能够轻松替换,而不是让这些东西紧密耦合在一起。
这样做可以吗?我对Python还很陌生。
4 个回答
1
一个选择是使用 zope 接口。不过,正如 Wai Yip Tung 所说,你并不一定需要使用接口就能达到同样的效果。
zope.interface
这个包其实更多的是一个工具,用来帮助你了解如何与对象进行交互(通常是在有多个开发者的大型代码库中)。
2
当然。在这种情况下,也不需要创建基类或接口,因为一切都是动态的。
6
对于那些来自强类型语言的人来说,Python 不需要类接口。你可以通过一个基础类来模拟这个功能。
class BaseAccess:
def open(arg):
raise NotImplementedError()
class Pop3Access(BaseAccess):
def open(arg):
...
class AlternateAccess(BaseAccess):
def open(arg):
...
不过,你完全可以写出不使用 BaseAccess 的相同代码。强类型语言需要接口来在编译时进行类型检查。而在 Python 中,这并不必要,因为一切都是在运行时动态查找的。你可以去 谷歌一下 '鸭子类型' 来了解它的理念。
Python 2.6 中增加了一个抽象基类模块,但我自己并没有使用过它。