1. 按
__init__.py中可以设置外界通过包名所能访问的模块。
- 当外界使用
import ...
语句导入包后,就可以通过.
访问我们指定对外提供的模块了。 - 当外界使用
from ... import ...
直接导入包内的模块时,不论导入的模块是否在__init__.py中被指定了,都可以正常被导入。
2. 示例
目录结构如下:
2.1. 示例1
testPackage/__init__.py
from . import send_module from . import receive_module
testPackage/receive_module.py
def receive(): print("receive function")
testPackage/send_module.py
def send(): print("send function")
main.py
import testPackage testPackage.receive_module.receive() testPackage.send_module.send()
2.2. 示例2
在示例1的基础上,修改testPackage/__init__.py
为:
#from . import send_module
from . import receive_module
这时再次执行时会报错module 'testPackage' has no attribute 'send_module'
,因为此时只能通过testPackage
这个包名访问receive_module
而不能访问send_module
。
2.3. 示例3
在示例2的基础上,修改main.py
为:
import testPackage
from testPackage import send_module
testPackage.receive_module.receive()
testPackage.send_module.send()
send_module.send()
这时再次执行时就不会报错了。