天天看點

包的使用 | 手把手教你入門Python之五十

上一篇: 怎樣使用自定義子產品? | 手把手教你入門Python之四十九 下一篇: 初識面向對象 | 手把手教你入門Python之五十一 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《Python入門2020最新大課》 ,主講人姜偉。

包的使用

一個子產品就是一個 py 檔案,在 Python 里為了對子產品分類管理,就需要劃分不同的檔案夾。多個有聯系的子產品可以将其放到同一個檔案夾下,為了稱呼方便,一般把 Python 里的一個代碼檔案夾稱為一個包。

導入包的方式

現有以下包newmsg ,包里有兩個子產品,分别是sendmsg.py 、recvmsg.py 檔案。在包的上級檔案夾里,有一個test.py 檔案,目标是在test.py 檔案里引入newmsg 的兩個子產品。

目錄結構如下圖所示:

包的使用 | 手把手教你入門Python之五十

sendmsg.py檔案里的内容如下:

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

recvmsg.py檔案里的内容如下:

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

可以使用以下幾種方式來導入子產品,使用子產品里的方法。

1>. 直接使用包名.子產品名導入指定的子產品。

包的使用 | 手把手教你入門Python之五十

2>. 使用

from xxx import xxx

方式導入指定子產品。

包的使用 | 手把手教你入門Python之五十

3>. 使用

__init__.py

⽂檔案,導入包里的指定子產品。

可以在

newmsg

里建立

__init__.py

檔案,在該檔案里導入指定的内容。

包的使用 | 手把手教你入門Python之五十

__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')           

别的子產品在引入這個包的時候,會自動調用這段代碼。

包的使用 | 手把手教你入門Python之五十

__all__

__init__.py

檔案中,定義一個

__all__

變量,它控制着

from 包名 import *

時導入的子產品。

newmsg/__init__.py

__all__ = ['sendmsg','recvmsg']           
包的使用 | 手把手教你入門Python之五十

配套視訊