小编典典

Python中抽象类和接口的区别

all

Python中的抽象类和接口有什么区别?


阅读 172

收藏
2022-03-06

共1个答案

小编典典

您有时会看到以下内容:

class Abstract1:
    """Some description that tells you it's abstract,
    often listing the methods you're expected to supply."""

    def aMethod(self):
        raise NotImplementedError("Should have implemented this")

因为 Python 没有(也不需要)正式的接口契约,所以不存在抽象和接口之间的 Java
风格区别。如果有人努力定义一个正式的接口,它也将是一个抽象类。唯一的区别在于文档字符串中声明的意图。

当你有鸭子打字时,抽象和接口之间的区别是一件令人毛骨悚然的事情。

Java 使用接口是因为它没有多重继承。

因为 Python 有多重继承,所以你可能还会看到类似这样的东西

class SomeAbstraction:
    pass  # lots of stuff - but missing something

class Mixin1:
    def something(self):
        pass  # one implementation

class Mixin2:
    def something(self):
        pass  # another

class Concrete1(SomeAbstraction, Mixin1):
    pass

class Concrete2(SomeAbstraction, Mixin2):
    pass

这使用一种带有混合的抽象超类来创建不相交的具体子类。

2022-03-06