You need to enable JavaScript to run this app. 如何在Python中导入自定义脚本后遍历其中的所有类
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中导入自定义脚本后遍历其中的所有类

遍历导入模块内自定义类的实现方案

不需要借助第三方库,仅通过Python标准库即可实现你需要的类遍历逻辑,核心是扫描目标模块的命名空间,筛选出符合要求的类对象,避免无关对象的干扰。

推荐实现(使用标准库inspect,准确率最高)

inspect是Python内置的模块内省工具,可以精准判断对象的类型与定义来源,适配绝大多数开发场景,对应myscript.py的完整实现如下:

# myscript.py
import foo
import inspect

# 筛选foo模块内直接定义的所有类
foo_internal_classes = [
    obj for _, obj in inspect.getmembers(foo)
    # 两层判断:首先判断是类对象,其次确认类的定义源就是foo模块本身
    if inspect.isclass(obj) and inspect.getmodule(obj) == foo
]

# 遍历所有筛选到的类执行自定义逻辑
for cls in foo_internal_classes:
    # 在此处编写处理逻辑,比如打印类名、实例化、执行类方法等
    print(f"当前遍历到的类:{cls.__name__}")

针对你给出的示例foo.py,运行上述代码时,导入foo模块就会触发类定义阶段的打印输出,完成筛选后会依次遍历识别出的a、b、c三个自定义类。

简化实现(无额外模块依赖)

如果不想导入inspect模块,也可以直接通过模块的内置命名空间属性实现筛选,逻辑和上述方案完全一致:

# myscript.py
import foo

foo_internal_classes = [
    value for value in foo.__dict__.values()
    # 判断逻辑:值是类对象,且类的所属模块名和当前foo模块的名称完全匹配
    if isinstance(value, type) and value.__module__ == foo.__name__
]

for cls in foo_internal_classes:
    # 自定义处理逻辑
    pass

注意事项

  • 两个方案都做了类来源的判断,不会把foo.py中从其他模块导入的第三方类、内置类型误统计为自定义类。如果需要统计全部类对象(包含导入的类),可以去掉代码里的模块来源判断条件。
  • 针对你提供的示例场景,两种方案都可以准确识别所有自定义类,不需要安装任何外部依赖。

内容的提问来源于stack exchange,提问作者sss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 04:27:03