上一篇: 怎樣使用自定義子產品? | 手把手教你入門Python之四十九 下一篇: 初識面向對象 | 手把手教你入門Python之五十一 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《Python入門2020最新大課》 ,主講人姜偉。
包的使用
一個子產品就是一個 py 檔案,在 Python 里為了對子產品分類管理,就需要劃分不同的檔案夾。多個有聯系的子產品可以将其放到同一個檔案夾下,為了稱呼方便,一般把 Python 里的一個代碼檔案夾稱為一個包。
導入包的方式
現有以下包newmsg ,包里有兩個子產品,分别是sendmsg.py 、recvmsg.py 檔案。在包的上級檔案夾里,有一個test.py 檔案,目标是在test.py 檔案里引入newmsg 的兩個子產品。
目錄結構如下圖所示:

sendmsg.py檔案里的内容如下:
def send_msg():
print('------sendmsg方法被調用了-------')
recvmsg.py檔案里的内容如下:
def recv_msg():
print('-----recvmsg方法被調用了--------')
可以使用以下幾種方式來導入子產品,使用子產品里的方法。
1>. 直接使用包名.子產品名導入指定的子產品。
2>. 使用
from xxx import xxx
方式導入指定子產品。
3>. 使用
__init__.py
⽂檔案,導入包里的指定子產品。
可以在
newmsg
里建立
__init__.py
檔案,在該檔案里導入指定的内容。
在
__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
為空僅僅是把這個包導入,不會導入包中的子產品。可以在
__init__.py
檔案中編寫内容。
newmsg/__init__.py
檔案:
print('hello world')
别的子產品在引入這個包的時候,會自動調用這段代碼。
__all__
__all__
__init__.py
檔案中,定義一個
__all__
變量,它控制着
from 包名 import *
時導入的子產品。
newmsg/__init__.py
__all__ = ['sendmsg','recvmsg']