我使用__init__.py
在我做from myprojects.something import blabla
時運行檢查。__init__.py的用法
今天我開始使用pyzmq
,我想看看幕後發生了什麼。所以我瀏覽了github中的代碼,我發現(對我來說)__init__.py
有一些奇怪的用法,我無法解釋自己。
例如zmq/core/__init__.py
。請問zmq.core.__all__
的__all__
的值爲zmq.core.constants, zmq.core.error, zmq.core.message, etc.
?
在zmq/__init__.py
我看到在端
__all__ = ['get_includes'] + core.__all__
get_includes
哪裏是基本上返回與該模塊的目錄和在父目錄utils目錄的列表的功能。
這是什麼意思? __init.py__
做了什麼實現?
我在問這裏之前已閱讀過這部分文檔。但這仍然不能回答我的問題。也許我應該用另一種方式來問:我認爲使用'from bla import ble'的原因是您控制了您的命名空間,這意味着您決定將哪些符號添加到您的名稱空間中。 – Pablo
正如C中使用'#include'的對比可能會導致已經定義的函數,變量等發生衝突一樣,你應該只導入你真正需要的符號。儘管我在python文檔中的某處閱讀過,使用'from bla import *'不是一個好習慣。如果是這樣,那麼爲什麼麻煩定義'__ all__'呢?並且''__all__ = ['get_includes'] + core .__ all__'在執行'import *'時會得到評估嗎?來自bla import *的 – Pablo
不是一個好習慣,但有一些模塊通常是安全的。我經常從數學導入*做。這些模塊的文檔通常指出,它們被設計爲以這種方式使用,並且它們支持像__all__這樣的細節,以使它更容易一些。但從x導入*是stil的東西要謹慎使用,只有你知道它不會導致問題的包。 – TimothyAWiseman