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

Bla*_*man 6 python oop

是否可以在python和接口的各种实现中创建类接口.

示例:我想为pop3访问(以及所有方法等)创建一个类.如果我使用商业组件,我想包装它以遵守合同.

在将来,如果我想使用我自己的另一个组件或代码,我希望能够交换出来并且没有紧密耦合的东西.

可能?我是python的新手.

Wai*_*ung 6

对于来自强类型语言背景的人来说,Python不需要类接口.您可以使用基类来模拟它.

class BaseAccess:
  def open(arg):
    raise NotImplementedError()

class Pop3Access(BaseAccess):
  def open(arg):
    ...

class AlternateAccess(BaseAccess):
  def open(arg):
    ...
Run Code Online (Sandbox Code Playgroud)

但是,您可以轻松编写相同的代码而无需使用BaseAccess.强类型语言需要在编译期间进行类型检查的接口.对于Python,这不是必需的,因为在运行时动态查找所有内容.Google为其哲学打造"鸭子打字".

Python 2.6中添加了一个Abstract Base Classes模块.但我还没有用过它.


Mik*_*ham 0

是的,这是可能的。这样做通常没有任何障碍:只需保持稳定的 API 并改变实现它的方式即可。