如何在Python类中导入另一文件的所有类(无需显式枚举)
解决类内批量导入其他模块类的问题
由于Python不允许在类作用域内使用from classes import *,可以通过动态绑定类属性的方式实现需求,以下是两种实用方案(适配Python3.8+):
方案1:基础版 - 批量绑定模块内所有类
先在模块级别导入classes模块,再遍历模块成员,把所有类绑定到classlist类的属性上:
# main.py import classes class classlist: pass # 遍历classes模块的成员,筛选类并绑定 for name, obj in vars(classes).items(): if isinstance(obj, type): setattr(classlist, name, obj)
使用时直接通过classlist.clsA、classlist.clsB访问即可。
方案2:精准版 - 只绑定目标模块自身定义的类
如果classes.py中存在导入的外部类或非类成员,用inspect模块可以精准筛选出模块自身定义的类:
# main.py import classes import inspect class classlist: pass # 筛选classes模块本地定义的类 for name, obj in inspect.getmembers(classes, inspect.isclass): if obj.__module__ == classes.__name__: setattr(classlist, name, obj)
这个方案能避免把模块中导入的其他类(比如from other import SomeClass)误绑定到classlist上。
补充说明
Python语法限制import *只能在模块级别执行,类内部不支持这种导入语法,所以动态绑定属性是最直接的替代方案,本质是把类作为属性容器,手动将外部类挂载到它上面。
内容的提问来源于stack exchange,提问作者K. C
相关产品推荐
相关产品推荐

