python中动态获取子类
2021/5/15 12:55:24
本文主要是介绍python中动态获取子类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
当父类和子类都在一个文件下时,直接在父类中调用 __subclassess__就可以获得所有子类,如:
class A(object): pass class B(A): pass class C(A): pass for sub in A.__subclasses__(): print(sub.__name__)
但是当子类和父类不在一个文件下时就会获取不到, 就需要通过动态导包来实现,我这里是父类和子类在同一个目录下,如果目录不同,则自己调整路径就行,代码参考:
class A(object): @classmethod def get_sub(cls): """动态获取继承的子类""" rel_path = os.path.relpath(__file__) # 相对路径,可能项目的根目录会有 .., eg: '..\\..\\hdyplus\\app\\services\\service_utils\\new\\api_parse.py' package, file_name = os.path.split(rel_path) package_list = [str(i) for i in package.split(os.path.sep) if i != '..'] package = '.'.join(package_list) current_path = os.path.dirname(os.path.abspath(__file__)) current_files = [f.split('.')[0] for f in os.listdir(current_path) if isfile(join(current_path, f))] for f in current_files: try: module = importlib.import_module('.%s' % f, package=package) for name, sub in inspect.getmembers(module): if inspect.isclass(sub): # 类别是class,并且父类是A if sub_class.__base__ == cls: print(sub.__name__)except Exception as e:pass
这篇关于python中动态获取子类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器