模塊包:
包通常總是一個目錄,目錄下爲首的一個文件便是 __init__.py。然後是一些模塊文件和子目錄,假如子目錄中也有 __init__.py 那麼它就是這個包的子包了。差不多就像這樣吧:
Package1/ __init__.py Module1.py Module2.py Package2/ __init__.py Module1.py Module2.py
我們可以就這樣導入一個包:
import Package1
或者調入一個子模塊和子包:
from Package1 import Module1from Package1 import Package2import Packag1.Module1import Packag1.Package2
可以深入好幾層包結構:
from Package1.Package2 import Module1import Package1.Package2.Module1
大致就這樣吧,我覺得,包的精髓應該是在 __init__.py 這個文件之中的。
__init__.py 文件:
__init__.py 控制着包的導入行爲。假如 __init__.py 爲空,那麼僅僅導入包是什麼都做不了的。
>>> import Package1>>> Package1.Module1Traceback (most recent call last): File "<pyshell#1>", line 1, in ? Package1.Module1AttributeError: 'module' object has no attribute 'Module1'
我們需要在 __init__.py 裏把 Module1 預先導入:
#文件 __init__.pyimport Module1
測試:
>>> import Package1>>> Package1.Module1<module 'Package1.Module1' from 'Module.pyc'>
__init__.py 中還有一個重要的變量,叫做 __all__。我們有時會使出一招“全部導入”,也就是這樣:
from PackageName import *
這時 import 就會把註冊在包 __init__.py 文件中 __all__ 列表中的子模塊和子包導入到當前作用域中來。比如:
#文件 __init__.py__all__ = ['Module1', 'Module2', 'Package2']
測試:
>>> from Package1 import *>>> Module2<module 'Package1.Module2' from 'Module.pyc'>
__init__.py 文件會在導入時被執行。