检测摘要 class、python 的不完整子 class

Detect incomplete subclass of abstract class, python

在Python中,如何区分具体的子类和仍然是抽象的子类(即并非所有抽象方法都已实现)?

考虑以下几点:

import abc

class A(abc.ABC):
    @abc.abstractmethod
    def do_something(self):
        pass

class B(A):
    def do_something(self):
        print('I am doing')

class C(A):
    pass

for subclass in A.__subclasses__():
    if is_concrete_class(subclass):
        subclass().do_something()
    else:
        print('subclass is still abstract')

is_concrete_class的实现是什么?

我可以尝试实例化 __subclasses__() 给出的每个子类并捕获 TypeError: Can't instantiate abstract class <class_name> with abstract methods <...>,但是 TypeError 似乎太宽泛了,无法捕获异常。

我没有在 Python's ABC Library 中找到任何有用的东西。

inspect模块中有一个function for thatinspect.isabstract(some_object)会告诉你一个对象是否是抽象的class。

它 returns True 用于抽象 class,False 用于其他任何东西,包括抽象方法,class 继承自 abc.ABC 但仍然是具体的,因为没有抽象方法,以及与抽象 classes 无关的对象,例如 3.