__init__.py的作用
__init__.py
主要是用來初始化 Python包(packages)的,它在模組載入最開始執行。
以下目錄結構為示例:
├─test
│ ├─package_1
│ │ ├─__init__.py
│ │ ├─m1.py
│ ├─package_2
│ │ ├─__init__.py
│ │ └─m2.py
│ ├─test.py
其中包含兩個包package_1
,package_2
__init__.py中有什麼
如上目錄結構,如果兩個包中的__init__.py
都為空的話,預設在test.py
中我們只能執行如下:
from package_2 import m2
print(m2.m2s())
當想要執行
import package_2
print(package_2.m2.m2s())
或
from package_2 import *
print(m2.m2s())
則會丟擲異常
AttributeError: module 'package_2' has no attribute 'm2'
這是因為在__init__.py
中並沒有進行包提升
如何執行
此時以package_2包中的__init__.py
為例
當我們在包中提升匯入許可權即可:
from package_2.m2 import m2s
在test.py中,執行
from package_2 import m2s
print(m2s())
通常我們經常還會遇到 from xxx import *
我們只需要在init.py中載入all允許全部匯出的模組即可,如在package_2的init.py中加入
__all__ = ['m2']
test.py中執行
from package_2 import *
print(m2.m2s())
__all__
是一個列表變數,放的是你希望匯入的模組的名字。
當 __init__.py
中定義了 __all__
變數時,import * 只能匯入 __all__
允許的模組
原創地址:http://blog.crcms.cn/?p=115
本作品採用《CC 協議》,轉載必須註明作者和本文連結