開發與維運

包的使用

本文來自於千鋒教育在阿里雲開發者社區學習中心上線課程《Python入門2020最新大課》,主講人姜偉。

包的使用

一個模塊就是一個 py 文件,在 Python 里為了對模塊分類管理,就需要劃分不同的文件夾。多個有聯繫的模塊可以將其放到同一個文件夾下,為了稱呼方便,一般把 Python 里的一個代碼文件夾稱為一個包

導入包的方式

現有以下包newmsg ,包里有兩個模塊,分別是sendmsg.py 、recvmsg.py 文件。在包的上級文件夾里,有一個test.py 文件,目標是在test.py 文件里引入newmsg 的兩個模塊。

目錄結構如下圖所示:
image.png

sendmsg.py文件里的內容如下:

def send_msg():
    print('------sendmsg方法被調用了-------')

recvmsg.py文件里的內容如下:

def recv_msg():
    print('-----recvmsg方法被調用了--------')

可以使用以下幾種方式來導入模塊,使用模塊里的方法。
1>. 直接使用包名.模塊名導入指定的模塊。
image.png
2>. 使用from xxx import xxx 方式導入指定模塊。
image.png
3>. 使用__init__.py ⽂文件,導入包里的指定模塊。
可以在newmsg 里創建__init__.py文件,在該文件里導入指定的內容。
image.png
__init__.py文件里編寫代碼:

from . import sendmsg # 導入指定的模塊   . 代表的是當前文件夾

test.py文件里的代碼

import newmsg # 導入時,只需要輸入包名即可。在包名的__init__.py文件里,導入了指定模塊
newmsg.sendmsg.sendm_msg() # 可以直接調用對應的方法
# newmsg.recvmsg.recv_msg() 不可以使用 recvmsg 模塊,因為 __init__.py文件里沒有導入這個模塊

4.> 使⽤用__init__.py文件,結合__all__ 屬性,導入包里的所有模塊。
newmsg 包里的__init__.py 文件里編寫代碼:

__all__ = ["sendmsg","recvmsg"] # 指定導入的內容

test.py文件代碼:

from newmsg import * # 將newmsg里的__inint__.py文件里,__all__屬性對應的所有模塊都導入
sendmsg.sendmsg()
recvmsg.recvmsg()

總結

  • 包將有聯繫的模塊組織在一起,即放到同一個文件夾下,並且在這個文件夾創建一個名字為__init__.py文件,那麼這個文件夾就稱之為包。
  • 有效避免模塊名稱衝突問題,讓應用組織結構更加清晰

__init__.py 文件有什麼用

__init__.py 控制著包的導入行為。__init__.py 為空僅僅是把這個包導入,不會導入包中的模塊。可以在__init__.py 文件中編寫內容。

newmsg/__init__.py文件:

print('hello world')

別的模塊在引入這個包的時候,會自動調用這段代碼。
image.png

__all__

__init__.py文件中,定義一個__all__ 變量,它控制著 from 包名 import *時導入的模塊。
newmsg/__init__.py 文件:

__all__ = ['sendmsg','recvmsg']

image.png

配套視頻

Leave a Reply

Your email address will not be published. Required fields are marked *