詳解Python項目開發時自定義模塊中對象的導入和使用

編程語言 Python 中國統計網 中國統計網 2017-08-26

詳解Python項目開發時自定義模塊中對象的導入和使用

背景:1)任何一個Python程序文件既可以直接執行,也可以作為模塊導入再使用其中的對象;2)對於大型系統開發,一般不會把所有代碼放到單個文件中,而是根據功能將其分類並分散多個模塊中,在編寫小型項目時最好也能養成這樣的好習慣。

本文介紹Python自定義模塊中對象的導入和使用。

假設當前工作目錄為C:\Python36,創建一個子目錄child,然後在其中創建一個Python程序文件add.py,其中的代碼為:

def add(x, y):

return x+y

這時,文件夾結構如圖所示:

詳解Python項目開發時自定義模塊中對象的導入和使用

現在我們啟動IDLE交互編程模式,默認工作目錄是C:\Python36,執行下面的代碼:

>>> import child

>>> child.add.add(3,5)

Traceback (most recent call last):

File "<pyshell#17>", line 1, in <module>

child.add.add(3,5)

AttributeError: module 'child' has no attribute 'add'

詳解Python項目開發時自定義模塊中對象的導入和使用

錯誤提示顯示,child模塊中沒有可用的add,這是因為child文件夾被認為是一個包,而add.py是包中的子模塊,並沒有隨著child一起導入。繼續執行下面的代碼:

>>> import child.add

>>> child.add.add(3,5)

8

自定義模塊中的對象成功被導入並能夠正常使用,也就是說,如果要使用的對象在子模塊中,應該單獨使用import來導入子模塊。或者使用下面的方法:

>>> from child import add

>>> add.add(3,5)

8

接下來在IDLE中單擊菜單“Restart Shell”恢復初始狀態,然後執行下面的代碼:

>>> from child import *

>>> add.add(3,5)

Traceback (most recent call last):

File "<pyshell#24>", line 1, in <module>

add.add(3,5)

NameError: name 'add' is not defined

詳解Python項目開發時自定義模塊中對象的導入和使用

錯誤提示顯示並不存在add這樣的名字,也就是說命令from child import *並沒有導入add模塊。現在在child子文件夾中創建一個Python程序文件__init__.py,其中內容為:

__all__ = ['add']

此時文件夾結構變為:

詳解Python項目開發時自定義模塊中對象的導入和使用

然後回到IDLE中執行剛才的代碼:

>>> from child import *

>>> add.add(3,5)

8

結果正常。原因在於,如果文件夾作為包來使用,並且其中包含__init__.py文件時,__init__.py文件中的特殊列表成員__all__用來指定from ... import *時哪些子模塊或對象會被自動導入

End.

來源:公眾號“Python小屋”

運行人員:中國統計網小編(微信號:itongjilove)

微博ID:中國統計網

中國統計網,是國內最早的大數據學習網站,公眾號:中國統計網

http://www.itongji.cn

相關推薦

推薦中...