全網最適合入門的物件導向程式設計教程:21 類和物件的 Python 實現-多檔案的組織:模組 module 和包 package

FreakStudio發表於2024-07-19

全網最適合入門的物件導向程式設計教程:21 類和物件的 Python 實現-多檔案的組織:模組 module 和包 package

摘要:

本文主要介紹了在使用 Python 物件導向程式設計時,如何實現多檔案的組織,介紹了模組和包的定義及使用優點,同時講解了如何在包中匯入模組或類。

原文連結:

FreakStudio的部落格

往期推薦:

學嵌入式的你,還不會物件導向??!

全網最適合入門的物件導向程式設計教程:00 物件導向設計方法導論

全網最適合入門的物件導向程式設計教程:01 物件導向程式設計的基本概念

全網最適合入門的物件導向程式設計教程:02 類和物件的 Python 實現-使用 Python 建立類

全網最適合入門的物件導向程式設計教程:03 類和物件的 Python 實現-為自定義類新增屬性

全網最適合入門的物件導向程式設計教程:04 類和物件的Python實現-為自定義類新增方法

全網最適合入門的物件導向程式設計教程:05 類和物件的Python實現-PyCharm程式碼標籤

全網最適合入門的物件導向程式設計教程:06 類和物件的Python實現-自定義類的資料封裝

全網最適合入門的物件導向程式設計教程:07 類和物件的Python實現-型別註解

全網最適合入門的物件導向程式設計教程:08 類和物件的Python實現-@property裝飾器

全網最適合入門的物件導向程式設計教程:09 類和物件的Python實現-類之間的關係

全網最適合入門的物件導向程式設計教程:10 類和物件的Python實現-類的繼承和里氏替換原則

全網最適合入門的物件導向程式設計教程:11 類和物件的Python實現-子類呼叫父類方法

全網最適合入門的物件導向程式設計教程:12 類和物件的Python實現-Python使用logging模組輸出程式執行日誌

全網最適合入門的物件導向程式設計教程:13 類和物件的Python實現-視覺化閱讀程式碼神器Sourcetrail的安裝使用

全網最適合入門的物件導向程式設計教程:全網最適合入門的物件導向程式設計教程:14 類和物件的Python實現-類的靜態方法和類方法

全網最適合入門的物件導向程式設計教程:15 類和物件的 Python 實現-__slots__魔法方法

全網最適合入門的物件導向程式設計教程:16 類和物件的Python實現-多型、方法重寫與開閉原則

全網最適合入門的物件導向程式設計教程:17 類和物件的Python實現-鴨子型別與“file-like object“

全網最適合入門的物件導向程式設計教程:18 類和物件的Python實現-多重繼承與PyQtGraph串列埠資料繪製曲線圖

全網最適合入門的物件導向程式設計教程:19 類和物件的 Python 實現-使用 PyCharm 自動生成檔案註釋和函式註釋

全網最適合入門的物件導向程式設計教程:20 類和物件的Python實現-組合關係的實現與CSV檔案儲存

更多精彩內容可看:

給你的 Python 加加速:一文速通 Python 平行計算

一文搞懂 CM3 微控制器除錯原理

肝了半個月,嵌入式技術棧大彙總出爐

電子計算機類比賽的“武林秘籍”

一個MicroPython的開源專案集錦:awesome-micropython,包含各個方面的Micropython工具庫

文件和程式碼獲取:

可訪問如下連結進行對文件下載:

https://github.com/leezisheng/Doc

image

本文件主要介紹如何使用 Python 進行物件導向程式設計,需要讀者對 Python 語法和微控制器開發具有基本瞭解。相比其他講解 Python 物件導向程式設計的部落格或書籍而言,本文件更加詳細、側重於嵌入式上位機應用,以上位機和下位機的常見串列埠資料收發、資料處理、動態圖繪製等為應用例項,同時使用 Sourcetrail 程式碼軟體對程式碼進行視覺化閱讀便於讀者理解。

相關示例程式碼獲取連結如下:https://github.com/leezisheng/Python-OOP-Demo

正文

現在我們知道了如何建立類和例項化物件,如何使用組合和繼承來編寫程式碼,但是應該如何組織它們?對於小程式來說,我們可以把所有的類放到一個檔案裡,然後在檔案最後新增一小段程式碼,讓它們互動起來。然而,隨著專案規模的增長,很難從眾多類中找出我們需要修改的那一個。

這時就需要模組(module),模組就是 Python 檔案,僅此而已。我們小程式中的一個檔案就是一個模組。兩個 Python 檔案就是兩個模組。如果我們在同一個目錄下有兩個檔案,我們可以從其中一個模組中匯入類到另一個模組中使用。

例如,我們正在構建一個串列埠上位機程式,其各個模組組織很可能如下:

image

我們可以將不同模組儲存到統一資料夾的不同 python 檔案中,在建立 main.py 匯入並控制不同模組交替執行或交換資料。import 語句用於從模組中匯入模組或特定的類、函式。透過將函式、變數、類儲存在儲存在獨立的.py 檔案中,可隱藏程式碼實現的細節,將不同程式碼塊重新組織,與主程式分離,簡化主程式的邏輯,提高主程式的可讀性。

如下為我們的檔案組織:

檔名稱 檔案描述
Main.py 定義了感測器類和主機類的屬性和方法主程式,呼叫其他模組
FileIO.py 定義了 FileIOClass 的屬性和方法
Plot.py 定義了 PlotClass 的屬性和方法
Serial.py 定義了 SerialClass 的屬性和方法
my.log 程式日誌
file.csv 儲存感測器資料

image

image

我們可以在主檔案中,透過如下語句匯入自定義模組:

_# 引用自定義模組_
from FileIO import FileIOClass
from Plot   import PlotClass
from Serial import SerialClass

隨著專案中模組變得越來越多,我們可能會想要新增另外一層抽象,為模組層次新增某種巢狀的等級。但是我們不能將模組新增到模組中,畢竟一個檔案只能容納一個檔案,而模組就只是 Python 檔案而已。

但是檔案可以儲存在目錄下,模組也可以。一個包(package)是一個目錄下模組的集合。包的名字就是目錄的名字。我們只需要在目錄下新增一個名為__init__.py 的檔案(通常是空檔案)就可以告訴 Python 這個目錄是一個包。

在包之間匯入模組或類的時候要注意語法。在 Python 3 中,有兩種匯入模組的方法:絕對匯入和相對匯入:

  • 絕對匯入是指定我們想要匯入的模組、函式或路徑的完整路徑。import 語句用點號運算子(period operator)來區分包和模組。
  • 相對匯入基本上是一種尋找與當前模組在位置上有相對關係的類、函式或模組的方式。常用於處理同一個包下的相關模組。

具體使用方法可以點選:https://zhuanlan.zhihu.com/p/376426708

這裡需要注意,所有模組層的程式碼都會在匯入的時候立即執行。開發人員通常會在模組下方增加一些測試程式碼,為了避免這些測試程式碼在模組被匯入後執行,可以利用__name__屬性。

__name__屬性是 Python 的一個內建屬性,記錄了一個字串:

  • 若是在當前檔案,name 是 main;
  • 若是匯入的檔案,name 是模組名。

當你要匯入某個模組,但又不想模組的部分程式碼被直接執行,那就可以這一部分程式碼放在以下語句的內部:

# 模組或類
if __name__=='__main__:
    # 測試本檔案中模組/類的程式碼

image

相關文章