了解 Python 中的抽象基 类

Understanding Abstract Base Classes in Python

我正在阅读有关抽象基础 class 的内容,并浏览了 https://www.python-course.eu/python3_abstract_classes.php 网站。我对它们有了大致的了解,但我发现两个说法相互矛盾。

Subclasses of an abstract class in Python are not required to implement abstract methods of the parent class.

A class that is derived from an abstract class cannot be instantiated unless all of its abstract methods are overridden.

我对第一个陈述的理解是,派生 class 不需要实现父 class 的抽象方法,这是错误的。我做了一个示例程序来检查。

from abc import ABC, abstractmethod

class AbstractClassExample(ABC):

    @abstractmethod
    def do_something(self):
        print("Some implementation!")

class AnotherSubclass(AbstractClassExample):

    def just_another_method(self):
        super().do_something()
        print("The enrichment from AnotherSubclass")

x = AnotherSubclass() # TypeError: Can't instantiate abstract class AnotherSubclass with abstract methods do_something
x.do_something()

我想解释一下第一个语句的含义(最好有例子)。

您的代码表明第二个陈述是正确的。它并没有表明第一个陈述是错误的。

在您的代码中,您正试图 实例化 AnotherSubclass,这是不允许的,因为 AnotherSubclass 没有实现所有抽象方法。第二个声明是这样说的。

但是,如果您删除最后两行,即不实例化 AnotherSubclass,那么当您尝试 运行 它时,您的代码将不会产生任何错误。这表明第一个陈述是正确的 - sub类 of abstract 类 没有实现其所有抽象方法 允许存在 .

你可以再写一个AnotherSubclass的子类叫YetAnotherClass,这次实现抽象方法,就可以实例化YetAnotherClass了。请注意,您的程序现在执行某些操作,并且 AnotherSubclass 仍然允许存在。