python实现获取文件中的类方式

 更新时间:2025年12月31日 09:26:16   作者:我一个搬砖人  
本文介绍了两种获取Python文件中类的方法:一种是通过导入文件,另一种是通过不导入文件获取类名,不导入文件的方法通过解析抽象语法树(AST)并使用正则表达式来过滤出特定类名,从而避免了全量导入带来的问题

1. 导入文件的方式获取文件中的类

由于工作需求,需要获得文件中的某一些类的内容。

一般比较常用的方法是通过遍历文件,然后通过调用importlib包导入文件,就能获得文件中的内容,从而获取想要的类。

代码如下:

for importer, package_name, is_pkg in pkgutil.walk_packages('.'):
	importlib.import_module(package_name)
	module = sys.modules[package_name]

	for cls_name, cls in inspect.getmembers(module, inspect.isclass):
		if is_want_class(cls):  
			do_something()

该方法十分简单,但是也有弊端。由于需要导入文件,因此文件中的内容都会被执行。而在一个项目中,存在着成百上千的文件,有一些代码是相斥的。

如果通过这种方法获取类,轻则出现逻辑问题,重则出现异常,报错。

2. 通过不导入文件的方式获取文件中的类名,从而过滤文件

为了防止上面说到的问题影响项目,我们不能将所有文件通通导入进来。

但是换个思路,可以先通过不导入文件的方式获取文件中中存在的类名,如果存在的类名中有想要获取的类,再导入文件。通过这种方式避免导入所有文件,从而大大降低出错的可能性。

我们知道,python解释器在运行时候,对文件做了下列操作:

Parse source code into a parse tree (Parser/pgen.c)
Transform parse tree into an Abstract Syntax Tree (Python/ast.c)
Transform AST into a Control Flow Graph (Python/compile.c)
Emit bytecode based on the Control Flow Graph (Python/compile.c)

其中1,2步执行之后,会生成一棵抽象语法树,从而帮助解释器去解析代码结构。 

因此想要获得文件中的类,可以通过ast包获得生成的ast树,再通过遍历树节点的方式获得相应的内容。通过该方法,可以获得定义的变量和类名的文本信息。

在项目代码中,一般对于类的命名有特定的规范。因此需要正则表达式,可以过滤出文件中是否含有想要查找的类。

代码如下:

for root, dirs, files in os.walk("."):
	for file in files:
	    file_name = os.path.join(root, file)

	    with open(file_name, "r") as source:
                    # 将文件转化为ast树
                tree = ast.parse(source.read())
                # 获取树中的类
                class_name_list = [node.name for node in ast.walk(tree) if isinstance(node, ast.ClassDef)]
                # 这里通过正则want_pattern去匹配类,从而过滤出想要的类
                want_class_name_list = [name for name in class_name_list if re.search(want_pattern, name) is not None]

最后得到的want_class_name_list就是通过正则匹配出来的类的类名。通过判断want_class_name_list是否为空,就能知道文件中是否定义了自己想要的类。

如果定义了,再用方法1获取文件中的类即可。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python基于jieba分词实现snownlp情感分析

    Python基于jieba分词实现snownlp情感分析

    情感分析(sentiment analysis)是2018年公布的计算机科学技术名词,它可以根据文本内容判断出所代表的含义是积极的还是负面的等。本文将通过jieba分词实现snownlp情感分析,感兴趣的可以了解一下
    2023-01-01
  • numpy多项式拟合函数polyfit的使用方法代码

    numpy多项式拟合函数polyfit的使用方法代码

    这篇文章主要给大家介绍了关于numpy多项式拟合函数polyfit的使用方法,np.polyfit是Numpy库中的一个函数,用于在最小二乘意义下拟合多项式曲线到数据点集,需要的朋友可以参考下
    2024-01-01
  • Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例

    Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例

    这篇文章主要介绍了Python数据结构与算法之图的最短路径(Dijkstra算法),结合完整实例形式分析了Python图的最短路径算法相关原理与实现技巧,需要的朋友可以参考下
    2017-12-12
  • 使用uv安装多个Python版本的使用方法全攻略

    使用uv安装多个Python版本的使用方法全攻略

    本文介绍了新一代Python工具uv,它集成了pyenv、venv和pip的功能,提供更高效的Python版本管理、虚拟环境创建和依赖管理,感兴趣的小伙伴可以了解下
    2025-12-12
  • python中返回矩阵的行列方法

    python中返回矩阵的行列方法

    下面小编就为大家分享一篇python中返回矩阵的行列方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python 调用API接口 获取和解析 Json数据

    python 调用API接口 获取和解析 Json数据

    这篇文章主要介绍了python 如何调用API接口 获取和解析 Json数据,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-09-09
  • Python pyecharts实时画图自定义可视化经纬度热力图

    Python pyecharts实时画图自定义可视化经纬度热力图

    这篇文章主要为大家介绍了Python pyecharts实时画图自定义经纬度热力图实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • pycharm跑python项目易出错的问题总结

    pycharm跑python项目易出错的问题总结

    这篇文章主要介绍了pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排查和解决,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-09-09
  • Python实现随机漫步功能

    Python实现随机漫步功能

    随机漫步生成是无规则的,是系统自行选择的结果。接下来通过本文给大家介绍Python实现随机漫步功能,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-07-07
  • Python reversed反转序列并生成可迭代对象

    Python reversed反转序列并生成可迭代对象

    这篇文章主要介绍了Python reversed反转序列并生成可迭代对象,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10

最新评论