You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取指定Python文件内定义的类,排除导入类并替换弃用的imp模块

解决方案

实现思路

  • 替换已弃用的imp模块:使用Python官方推荐的importlib相关方法加载指定路径的Python文件为模块,功能完全兼容旧版imp.load_source。
  • 过滤导入的外部类:通过判断类的__module__属性与当前加载的模块名是否一致,筛选出仅在目标文件中定义的类:导入的外部类的__module__会指向它原本所属的模块名,只有当前文件内定义的类才会和加载的模块名匹配。

可直接运行的实现代码

兼容Python3.4+版本

import importlib.machinery
import inspect

# 加载指定路径的a.py为模块
loader = importlib.machinery.SourceFileLoader("__inspected__", './a.py')
module = loader.load_module()

class_members = inspect.getmembers(module, inspect.isclass)
for cls_name, cls_obj in class_members:
    # 仅保留当前模块内定义的类
    if cls_obj.__module__ == module.__name__:
        print(cls_name)

适配Python3.6+无弃用警告版本

import importlib.util
import inspect
import os

file_path = './a.py'
module_name = "__inspected__"

# 构建模块规范
spec = importlib.util.spec_from_file_location(module_name, os.path.abspath(file_path))
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)

class_members = inspect.getmembers(module, inspect.isclass)
for cls_name, cls_obj in class_members:
    if cls_obj.__module__ == module_name:
        print(cls_name)

运行效果

执行上述代码后,仅会输出MyClass,不会打印从c.py导入的CClass,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:06:03