python中類名和文件名的命名規(guī)則詳細(xì)解釋
問題:是pycharm規(guī)定還是pytest規(guī)定,文件名最好和類名一致,就是比如文件名是login,類名是Login,不記得是哪里規(guī)定的了,這么規(guī)定有什么好處?
這是一個非常好的問題,也是很多 Python 初學(xué)者會困惑的地方。
簡單直接的答案是:這不是 PyCharm 或 pytest 的強制規(guī)定,而是 Python 社區(qū)廣泛采納的一種最佳實踐和編碼風(fēng)格約定。
它的核心依據(jù)是 PEP 8 – Python 編碼風(fēng)格指南。雖然 PEP 8 沒有明文寫著“文件名必須和類名一致”,但它所倡導(dǎo)的命名規(guī)范自然導(dǎo)出了這種結(jié)果。
下面我為你詳細(xì)解釋為什么會有這種約定以及它的好處。
1. 命名約定的來源
對于普通模塊(文件)
- PEP 8 規(guī)定:模塊名(即文件名)應(yīng)該使用簡短、全小寫的名字,可以使用下劃線以提高可讀性。例如:
my_module.py,data_loader.py。 - 類名:類名應(yīng)該使用駝峰命名法(CapWords convention)。例如:
MyClass,DataLoader。
所以,如果你有一個類叫 DataLoader,那么它所在的文件最自然、最合理的名字就是全小寫的 data_loader.py。
類名:DataLoader -> 文件名:data_loader.py
對于測試模塊(pytest)
- pytest 規(guī)定:pytest 為了能自動發(fā)現(xiàn)測試用例,對文件名和函數(shù)名有強制要求:
- 測試文件名應(yīng)以
test_開頭或以_test.py結(jié)尾。例如:test_login.py或login_test.py。 - 測試類名應(yīng)以
Test開頭。例如:TestLogin。 - 測試函數(shù)名應(yīng)以
test_開頭。例如:test_login_success。
- 測試文件名應(yīng)以
所以,在測試中,如果你有一個測試類叫 TestLogin,那么它所在的測試文件最合理的名字就是 test_login.py。
測試類名:TestLogin -> 測試文件名:test_login.py
2. 這樣做的主要好處
這種“文件名與類名強相關(guān)”的約定帶來了巨大的便利:
1. 極高的可讀性和可發(fā)現(xiàn)性
- 一看就懂:當(dāng)你看到一個類名
UserManager時,你幾乎可以立刻猜到它定義在user_manager.py文件里。這極大地減少了尋找代碼位置的認(rèn)知負(fù)擔(dān)和時間成本。 - 反向亦然:當(dāng)你看到一個文件名
payment_processor.py時,你也能很容易猜到里面主要的類應(yīng)該叫PaymentProcessor。
2. 簡化導(dǎo)入語句
導(dǎo)入語句會變得非常直觀和整潔。你會發(fā)現(xiàn)導(dǎo)入語句和文件路徑幾乎有直接的映射關(guān)系。
# 從 user_manager.py 文件中導(dǎo)入 UserManager 類 from .user_manager import UserManager # 從 test_login.py 文件中導(dǎo)入 TestLogin 類 from tests.test_login import TestLogin
如果命名不一致,導(dǎo)入語句就會變得很奇怪且難以理解。
3. 與 IDE 功能完美配合
現(xiàn)代 IDE(如 PyCharm)的強大導(dǎo)航和重構(gòu)功能都基于這種約定。
- Go to Definition (跳轉(zhuǎn)到定義):你在代碼中點擊
Login類,IDE 會精準(zhǔn)地帶你跳到login.py文件。 - Rename Refactoring (重命名重構(gòu)):如果你在 PyCharm 中重命名一個類(如將
Login改為UserLogin),IDE 會智能地詢問你是否也要重命名對應(yīng)的文件(將login.py改為user_login.py),并自動更新所有引用該文件和類的地方。這保證了項目結(jié)構(gòu)的一致性,避免了手動修改可能帶來的錯誤。
4. 遵循社區(qū)共識,降低協(xié)作成本
當(dāng)所有項目都遵循相似的約定時,任何一個新的開發(fā)者加入項目,都能憑借這種“肌肉記憶”快速上手和理解項目結(jié)構(gòu),而不需要去記憶每個項目獨特的、可能很隨意的命名規(guī)則。
總結(jié)
| 項目 | 來源 | 規(guī)則 | 好處 |
|---|---|---|---|
文件名小寫下劃線 (如 data_loader.py) | PEP 8 風(fēng)格指南 | 社區(qū)最佳實踐 | 可讀性高,易于導(dǎo)入 |
類名駝峰式 (如 DataLoader) | PEP 8 風(fēng)格指南 | 社區(qū)最佳實踐 | 符合面向?qū)ο缶幊虘T例,清晰易辨 |
測試文件以 test_ 開頭 (如 test_login.py) | pytest 框架規(guī)定 | 強制要求(為了自動發(fā)現(xiàn)測試) | pytest 能夠自動找到并運行測試用例 |
測試類以 Test 開頭 (如 TestLogin) | pytest 框架規(guī)定 | 強制要求(為了自動發(fā)現(xiàn)測試) | pytest 能夠識別該類為測試集合 |
所以,回到你的例子:
- 有一個類叫
Login,那么把它放在login.py文件里是一個非常好的、符合社區(qū)慣例的選擇。 - 有一個測試類叫
TestLogin,那么把它放在test_login.py文件里是 pytest 框架的強制要求,同時也是最佳實踐。
這雖然不是語法上的強制規(guī)定,但嚴(yán)格遵守這些約定會讓你的代碼更專業(yè)、更易維護、更受同事歡迎。
到此這篇關(guān)于python中類名和文件名的命名規(guī)則的文章就介紹到這了,更多相關(guān)python類名和文件名命名規(guī)則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一步步教你用python連接oracle數(shù)據(jù)庫
oracle作為最強大的數(shù)據(jù)庫,Python也提供了足夠的支持。不過與其他數(shù)據(jù)庫略有不同,下面這篇文章主要給大家介紹了關(guān)于如何使用python連接oracle數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2023-04-04
python使用pip安裝模塊出現(xiàn)ReadTimeoutError: HTTPSConnectionPool的解決方法
這篇文章主要介紹了python使用pip安裝模塊出現(xiàn)ReadTimeoutError: HTTPSConnectionPool的解決方法,需要的朋友可以參考下2019-10-10
Django urls.py重構(gòu)及參數(shù)傳遞詳解
這篇文章主要介紹了Django urls.py重構(gòu)及參數(shù)傳遞詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07
Python使用matplotlib.pyplot?as?plt繪圖圖層優(yōu)先級問題
這篇文章主要介紹了Python使用matplotlib.pyplot?as?plt繪圖圖層優(yōu)先級問題.文章圍繞主題展開詳細(xì)內(nèi)容需要的小伙伴可以參考一下2022-04-04
解決Scrapy安裝錯誤:Microsoft Visual C++ 14.0 is required...
下面小編就為大家?guī)硪黄鉀QScrapy安裝錯誤:Microsoft Visual C++ 14.0 is required...的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
解決springboot yml配置 logging.level 報錯問題
今天小編就為大家分享一篇解決springboot yml配置 logging.level 報錯問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02

