在Python中创建接口和可交换实现

6 投票
4 回答
1068 浏览
提问于 2025-04-15 22:51

在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 中增加了一个抽象基类模块,但我自己并没有使用过它。

撰写回答