在python项目中经常需要自己定义一个包(package)来进行代码分离,提高可读性。
所谓的包实质上是一个文件夹,在文件夹中包含.py文件和一个__init__ .py 文件(可以是空白),我认为可以把 __init__.py文件理解为包的“初始化”。如果没有这个文件,很多python的ide会认为这是个普通的文件夹而不是一个python包。
接下来就是基本讲解
假设文件目录如下
-b.py
-/package
- __init__.py
- a.py
下面是代码例子
当__init__.py为空白时
a.py
print "csdn blog"
__init__.py空白
b.py
import package
import package.a
example = package.a
print example
注意:如果在import package
后面没有再import package.a
,然后在下面直接用package包里面的a模块时会报错:
AttributeError: 'module' object has no attribute 'a'
或者
from package import a
example = package.a
print example
运行结果:
csdn blog
当__init__.py不空白时
__init__.py
import a
a.py和上面相同
b.py
import package
example = package.a
print example
此时运行正常(对比上面__init__.py空白时运行出错的例子)
要实现
from package import *
需要在__ init__.py文件中配置一个__all__列表
__init__.py
__all__=["a"]
b.py
from package import *
example = package.a
print example
运行正常,输出csdn blog
当你有多个模块时,__all__就很有用了,可以在__all__列表中继续添加。