Python package里的__init__.py的简析和用法说明
Python package里的__init__.py的简析和用法说明
??? 我一直很好奇PyCharm新建Package后,里面总有一个 __init__.py 文件,纳闷了,我一直没有用这个文件,删掉对python程序运行也没有什么影响,可能是我新建的方式不对,写一个python程序不用新建python package文件?下面对 __init__.py 进行分析。
__init__.py
一、简要说明
__init__.py是编辑器用来标识package包的。
如果你仅仅只是编写一个python程序,那么这个__init__.py可有可无,但是你要是想写一个包想写一个模块,想让这个包在别的程序中可以调用,那么这个文件一定要有,里面可以空着什么都不写,但是一定要有。
二、举个栗子(๑´͈ ᵕ `͈๑)◞♡
1. 现在package文件TestPy下有三个python文件,分别为Test.py、Test2.py、__init__.py。
Test.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def A():
print("A()")
def B():
print("B()")
Test2.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from TestPy import *
A()
B()
__init__.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from TestPy.Test import *
__all__ = ['A']
__init__.py里的 __all__ 后面会讲
2. 使用一个包或者模块,有两种操作,精准导入和模糊导入
2.1. 精准导入
示例如下:
from TestPy.Test import A
这样只能使用Test.A(),用什么就调用什么,大大增加了速度。
思考问题:
那么我们需要导入大量的方法,怎么办?一个一个导?
2.2. 模糊导入
示例如下:
from TestPy.Test import *
模糊导入将包/模块中的所有参数都导入进来,解决了上面的思考问题。但是问题又来了
思考问题:
如果一个包或者模块里有特别多的方法参数,那么这些参数方法是否会对用户产生干扰?
用户调用了一些不应该调用的参数或方法是否对包/模块产生影响?
3. __init__.py里的 __all__
来了来了,各位久等了。
在 __all__中可以声明定义允许用户可以调用的方法,入示例代码所示,只允许调用Test的A()方法
from TestPy.Test import *
__all__ = ['A']
如果强行调用Test的B()方法会报错,如截图所示
总而言之,可以在 __all__ 中限定用户调用的范围
更多推荐
所有评论(0)