检测摘要 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 that:inspect.isabstract(some_object)
会告诉你一个对象是否是抽象的class。
它 returns True
用于抽象 class,False
用于其他任何东西,包括抽象方法,class 继承自 abc.ABC
但仍然是具体的,因为没有抽象方法,以及与抽象 classes 无关的对象,例如 3
.
在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 that:inspect.isabstract(some_object)
会告诉你一个对象是否是抽象的class。
它 returns True
用于抽象 class,False
用于其他任何东西,包括抽象方法,class 继承自 abc.ABC
但仍然是具体的,因为没有抽象方法,以及与抽象 classes 无关的对象,例如 3
.