最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實現(xiàn)獲取文件中的類方式

 更新時間:2025年12月31日 09:26:16   作者:我一個搬磚人  
本文介紹了兩種獲取Python文件中類的方法:一種是通過導(dǎo)入文件,另一種是通過不導(dǎo)入文件獲取類名,不導(dǎo)入文件的方法通過解析抽象語法樹(AST)并使用正則表達(dá)式來過濾出特定類名,從而避免了全量導(dǎo)入帶來的問題

1. 導(dǎo)入文件的方式獲取文件中的類

由于工作需求,需要獲得文件中的某一些類的內(nèi)容。

一般比較常用的方法是通過遍歷文件,然后通過調(diào)用importlib包導(dǎo)入文件,就能獲得文件中的內(nèi)容,從而獲取想要的類。

代碼如下:

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()

該方法十分簡單,但是也有弊端。由于需要導(dǎo)入文件,因此文件中的內(nèi)容都會被執(zhí)行。而在一個項目中,存在著成百上千的文件,有一些代碼是相斥的。

如果通過這種方法獲取類,輕則出現(xiàn)邏輯問題,重則出現(xiàn)異常,報錯。

2. 通過不導(dǎo)入文件的方式獲取文件中的類名,從而過濾文件

為了防止上面說到的問題影響項目,我們不能將所有文件通通導(dǎo)入進(jìn)來。

但是換個思路,可以先通過不導(dǎo)入文件的方式獲取文件中中存在的類名,如果存在的類名中有想要獲取的類,再導(dǎo)入文件。通過這種方式避免導(dǎo)入所有文件,從而大大降低出錯的可能性。

我們知道,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步執(zhí)行之后,會生成一棵抽象語法樹,從而幫助解釋器去解析代碼結(jié)構(gòu)。 

因此想要獲得文件中的類,可以通過ast包獲得生成的ast樹,再通過遍歷樹節(jié)點的方式獲得相應(yīng)的內(nèi)容。通過該方法,可以獲得定義的變量和類名的文本信息。

在項目代碼中,一般對于類的命名有特定的規(guī)范。因此需要正則表達(dá)式,可以過濾出文件中是否含有想要查找的類。

代碼如下:

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:
                    # 將文件轉(zhuǎn)化為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獲取文件中的類即可。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python基于jieba分詞實現(xiàn)snownlp情感分析

    Python基于jieba分詞實現(xiàn)snownlp情感分析

    情感分析(sentiment analysis)是2018年公布的計算機科學(xué)技術(shù)名詞,它可以根據(jù)文本內(nèi)容判斷出所代表的含義是積極的還是負(fù)面的等。本文將通過jieba分詞實現(xiàn)snownlp情感分析,感興趣的可以了解一下
    2023-01-01
  • numpy多項式擬合函數(shù)polyfit的使用方法代碼

    numpy多項式擬合函數(shù)polyfit的使用方法代碼

    這篇文章主要給大家介紹了關(guān)于numpy多項式擬合函數(shù)polyfit的使用方法,np.polyfit是Numpy庫中的一個函數(shù),用于在最小二乘意義下擬合多項式曲線到數(shù)據(jù)點集,需要的朋友可以參考下
    2024-01-01
  • Python數(shù)據(jù)結(jié)構(gòu)與算法之圖的最短路徑(Dijkstra算法)完整實例

    Python數(shù)據(jù)結(jié)構(gòu)與算法之圖的最短路徑(Dijkstra算法)完整實例

    這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法之圖的最短路徑(Dijkstra算法),結(jié)合完整實例形式分析了Python圖的最短路徑算法相關(guān)原理與實現(xiàn)技巧,需要的朋友可以參考下
    2017-12-12
  • 使用uv安裝多個Python版本的使用方法全攻略

    使用uv安裝多個Python版本的使用方法全攻略

    本文介紹了新一代Python工具uv,它集成了pyenv、venv和pip的功能,提供更高效的Python版本管理、虛擬環(huán)境創(chuàng)建和依賴管理,感興趣的小伙伴可以了解下
    2025-12-12
  • python中返回矩陣的行列方法

    python中返回矩陣的行列方法

    下面小編就為大家分享一篇python中返回矩陣的行列方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python 調(diào)用API接口 獲取和解析 Json數(shù)據(jù)

    python 調(diào)用API接口 獲取和解析 Json數(shù)據(jù)

    這篇文章主要介紹了python 如何調(diào)用API接口 獲取和解析 Json數(shù)據(jù),幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • Python?pyecharts實時畫圖自定義可視化經(jīng)緯度熱力圖

    Python?pyecharts實時畫圖自定義可視化經(jīng)緯度熱力圖

    這篇文章主要為大家介紹了Python?pyecharts實時畫圖自定義經(jīng)緯度熱力圖實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • pycharm跑python項目易出錯的問題總結(jié)

    pycharm跑python項目易出錯的問題總結(jié)

    這篇文章主要介紹了pycharm跑python項目易出錯問題的相關(guān)資料,當(dāng)你在PyCharm中運行Python程序時遇到報錯,可以按照以下步驟進(jìn)行排查和解決,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • Python實現(xiàn)隨機漫步功能

    Python實現(xiàn)隨機漫步功能

    隨機漫步生成是無規(guī)則的,是系統(tǒng)自行選擇的結(jié)果。接下來通過本文給大家介紹Python實現(xiàn)隨機漫步功能,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-07-07
  • Python reversed反轉(zhuǎn)序列并生成可迭代對象

    Python reversed反轉(zhuǎn)序列并生成可迭代對象

    這篇文章主要介紹了Python reversed反轉(zhuǎn)序列并生成可迭代對象,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10

最新評論

五台县| 周至县| 吴堡县| 北宁市| 隆德县| 馆陶县| 紫阳县| 江北区| 左贡县| 宁海县| 文化| 仁寿县| 上蔡县| 蛟河市| 屏东市| 湖州市| 舞阳县| 永善县| 航空| 诏安县| 延川县| 阿瓦提县| 察隅县| 彭水| 黑山县| 新晃| 徐汇区| 通榆县| 铁力市| 卢龙县| 湘阴县| 卫辉市| 海门市| 泸西县| 高安市| 灵璧县| 永和县| 保山市| 鹤壁市| 合水县| 沭阳县|