没有合适的资源?快使用搜索试试~ 我知道了~
首页理解python中__init__.py和__all__
理解python中__init__.py和__all__
4 下载量 92 浏览量
更新于2023-05-04
评论
收藏 46KB PDF 举报
__ init __.py what is init.py? 通常在一个工程文件里面,我可能会发现在某个文件夹下面会有一个命名为__init__.py的py文件 why need init.py? 在一个工程文件下面,我们可能会有很多的py文件(模块),文件太多,管理很不方便,这时候我们就可以创建一个包(package)对这些文件进行管理,把具有共同特征的文件放在同一个package里面,那该如何创建package,很简单,其实就是新建一个文件夹,然后在里面新建一个__init__.py文件,这样子python就会把该文件夹当成一个package来看待了。package的引入是为了方便管理模块
资源详情
资源评论
资源推荐
理解理解python中中__init__.py和和__all__
__ init __.py
what is init.py?
通常在一个工程文件里面,我可能会发现在某个文件夹下面会有一个命名为__init__.py的py文件
why need init.py?
在一个工程文件下面,我们可能会有很多的py文件(模块),文件太多,管理很不方便,这时候我们就可以创建一个包
(package)对这些文件进行管理,把具有共同特征的文件放在同一个package里面,那该如何创建package,很简单,其实就是
新建一个文件夹,然后在里面新建一个__init__.py文件,这样子python就会把该文件夹当成一个package来看待了。package
的引入是为了方便管理模块和在程序中导入模块。
how to use init.py?
首先要知道:
1.当import package时候,package的__init__.py会同时被导入
2.采用精确导入package时候,init.py的模块,函数等会成为package的属性。
现在工程文件下有这样子的层次关系:
mypackage
model.py
util.py
main.py
model.py代码如下
class student():
pass
class teacher():
pass
util.py代码如下:
def play():
print("playing basketball")
def clean():
print("cleaning!"
init.py代码如下:
from .model import student,teacher
from .util import play
import numpy
main.py代码如下:
from mypackage import *
if __name__ == "__main__":
a = student()
print(numpy.array([1,2,4]))
这里使用模糊导入 from mypackage import *, 便可以把__init__.py的模块导入,使得main.py的代码更加整洁。当然模糊导入
是不建议的,因为当你多几条import *时候,根本看得出哪个模块来自哪个package,而且如果模块名字相同的话,后面的会
覆盖前面的,有bug很难de。
一般采用模块精确导入import x或者form x import y,main,py代码如下
import mypackage as mp
if __name__ == "__main__":
a = mp.student()
print(mp.numpy.array([1,2,4]))
可以看到,student类和numpy模块都需要在前面加上package的名字(student类和numpy模块成了mp的属性),使得模块导入
更加清晰。
再来谈谈再来谈谈__all__
what is all?
__ all__是python的特殊属性,是python的因为前后都有双下划线”__”
why need __ all __?
评论0