1. __init__.py
__init__.py
文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py
文件.
我们在导入一个包时,实际上是导入了它的__init__.py
文件。这样我们可以在__init__.py
文件中批量导入我们所需要的模块,而不再需要一个一个的导入。
.
└── mypackage
├── __init__.py
├── subpackage_1
│ ├── test11.py
│ └── test12.py
├── subpackage_2
│ ├── test21.py
│ └── test22.py
└── subpackage_3
├── test31.py
└── test32.py
在mypackage/__init__.py
中加入print("You have imported mypackage")
交互模式下:
>>> import mypackage
You have imported mypackage
因此,__init__.py
在包被导入时会被执行。通常在此文件中进行一些预处理操作。
__init__.py
中导入模块:
from .subpackage_1 import test11
from .subpackage_2 import test21
其中,.subpackage_2
是__init__.py
同层目录的subpackage_2
文件夹
└──package
├── subpackage1
│ └──__init__.py
│ └──a.py
└── subpackage2
├──__init__.py
└──b.py
import subpackage1.a # 将模块subpackage.a导入全局命名空间,例如访问a中属性时用subpackage1.a.attr
from subpackage1 import a # 将模块a导入全局命名空间,例如访问a中属性时用a.attr_a
from subpackage.a import attr_a # 将模块a的属性直接导入到命名空间中,例如访问a中属性时直接用attr_a
使用from语句可以把模块直接导入当前命名空间,from语句并不引用导入对象的命名空间,而是将被导入对象直接引入当前命名空间
2. 可被import导入的对象类型
-
模块文件(.py文件)
-
C或C++扩展(已编译为共享库或DLL文件)
-
包(包含多个模块)
-
内建模块(使用C编写并已链接到Python解释器中)
可作为模块的文件类型有.py
、.pyo
、.pyc
、.pyd
、.so
、.dll
参考: