首页 > 解决方案 > 获取给定 Python 类实现的所有抽象基类的列表

问题描述

给定一个类(在 Python 3.8 中),我如何获得它实现的所有抽象基类的列表?例如, given list,我正在寻找可以返回Container, Iterable, Collection, Sized,Sequence等的东西。

inspect.getmro(), __mro__, 和__bases__将提供父类,但它们不包括抽象基类。因此,因为list他们只提供object(以及list本身为 mro 提供)。

isinstance将判断一个对象是否实现了一个特定的抽象基类,而不是它实现的所有抽象基类的列表。

标签: pythonpython-3.x

解决方案


您可以使用collections.abc. 根据python文档

该模块提供了抽象基类,可以用来测试一个类是否提供了特定的接口;例如,它是可散列的还是映射的。

链接 - https://docs.python.org/3/library/collections.abc.html

In [22]: import collections.abc

In [23]: import inspect

In [31]: [(k,v) for k, v in vars(collections.abc).items() if inspect.isclass(v) and issubclass(list, v) ]
Out[31]:
[('Iterable', collections.abc.Iterable),
 ('Reversible', collections.abc.Reversible),
 ('Sized', collections.abc.Sized),
 ('Container', collections.abc.Container),
 ('Collection', collections.abc.Collection),
 ('Sequence', collections.abc.Sequence),
 ('MutableSequence', collections.abc.MutableSequence)]

推荐阅读