Python中如何查看抽象子类继承的抽象方法与属性?
查看抽象子类需实现的所有抽象方法(含继承)
针对你提出的问题——如何快速获取抽象子类(如PekineseAbstract)需要实现的所有抽象方法(包括从父类继承的),可以通过以下简洁方式解决,无需重复编写继承的抽象方法:
方法一:直接使用抽象类的__abstractmethods__属性
Python的ABC元类会自动收集当前类及所有父类中未实现的抽象方法,并存放在__abstractmethods__属性中,这是最直接的方式。
示例代码
from abc import ABC, abstractmethod class MammalAbstract(ABC): @abstractmethod def legs(self): pass class CanineAbstract(MammalAbstract): @abstractmethod def tail(self): pass class PekineseAbstract(CanineAbstract): @abstractmethod def yip(self): pass # 获取PekineseAbstract需实现的所有抽象方法 print(PekineseAbstract.__abstractmethods__) # 输出结果: {'legs', 'tail', 'yip'}
该属性返回一个集合,包含所有必须实现的抽象方法名称,无论这些方法定义在当前类还是继承链中的父类里。即使抽象类分散在不同文件,只要正确导入,__abstractmethods__依然能准确收集所有需要实现的方法。
方法二:自定义辅助函数格式化输出
如果需要更友好的输出格式,可以封装一个简单的辅助函数,将结果整理为有序列表:
def list_required_methods(abstract_cls): """返回抽象类需实现的所有抽象方法的有序列表""" return sorted(abstract_cls.__abstractmethods__) # 调用示例 print(list_required_methods(PekineseAbstract)) # 输出结果: ['legs', 'tail', 'yip']
关于可读性的说明
不需要为了可读性重复编写继承的抽象方法,原因如下:
__abstractmethods__已经提供了明确的契约清单,开发者可以直接通过该属性查看所有要求实现的方法;- Python的ABC机制会在实例化抽象子类的具体实现类时,自动检查所有抽象方法是否已实现,未实现则抛出
TypeError,保证契约的强制执行; - 重复编写继承的抽象方法会造成代码冗余,增加维护成本。
内容的提问来源于stack exchange,提问作者tlskr
相关产品推荐
相关产品推荐

