python的initpy
‘壹’ python中含__init__.py 的文件才会被认作是一个包,为什么呢,这个文件有什么作用呢
1、__init__.py是Python中package的标识
__init__.py 文件的一个主要作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件
2、批量引入(定义__all__用来模糊导入)
我们在python中导入一个包时,实际上是导入了它的__init__.py文件,这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。
3、配置模块的初始化操作,这个文件也是一个正常的python代码文件,因此可以将初始化代码放入该文件中。
(1)python的initpy扩展阅读
python中__init__.py文件的作用实例:
python的每个模块的包中,都有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的mole。__init__.py里面还是可以有内容的,我们在导入一个包时,实际上导入了它的__init__.py文件。
我们可以再__init__.py文件中再导入其他的包,或者模块。
[python]
import readers
import writers
import commands
import users
import meta
import auth
import admin
这样,当我们导入这个包的时候,__init__.py文件自动运行。帮我们导入了这么多个模块,我们就不需要将所有的import语句写在一个文件里了,也可以减少代码量。不需要一个个去导入mole了。
‘贰’ python脚本下面的 __init__.py 有什么作用
The __init__.py files are required to make Python treat the directories as containing packages; this is done to prevent directories with a common name, such as string, from unintentionally hiding valid moles that occur later on the mole search path. In the simplest case, __init__.py can just be an empty file, but it can also execute initialization code for the package or set the __all__variable, described later.
在文件夹中包含一个__init__.py,Python就会把文件夹当作一个package,里面的py文件就能够在外面被import了。
例如文件夹结构是:
sound/ Top-level package
__init__.py Initialize the sound package
formats/ Subpackage for file format conversions
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
...
filters/ Subpackage for filters
__init__.py
equalizer.py
vocoder.py
karaoke.py
外部就可以import sound.effects.echo来使用,sound文件夹和effects文件夹都被处理成package了。
‘叁’ python 为什么 都有个__int__.py
一般python只要是文件夹中就都会带一个__init__.py 但不强求
这个文件可以说是程序的入口 在外部导入这个包(也就是这个文件夹)的时候 一定要这个文件才能import 不然就会比较麻烦
所以这个包要被别人的调用的时候最好带上这个__init__.py 不然会让掉你程序的人头疼
如果只是自己写的脚本 其实带不带也没太大影响
‘肆’ python中setup.py和_init_.py的作用
_init_.py,是要想让一个文件夹成为包的必须的文件!这个文件可以为空,但是必须得有!
setup.py,是用来安装模块用的,dos命令下!
‘伍’ Python中的init.py有什么作用
你指的应该是是__init__.py文件,以下下详细解释:
__init__.py该文件的作用就是相当于把自身整个文件夹当作一个包来管理,每当有外部import的时候,就会自动执行里面的函数。
它具有以下几个作用:
1. 标识该目录是一个python的模块包(mole package)
如果你是使用python的相关IDE来进行开发,那么如果目录中存在该文件,该目录就会被识别为 mole package 。
2. 简化模块导入操作
假设我们的模块包的目录结构如下:
.
└── mypackage
├── subpackage_1
│ ├── test11.py
│ └── test12.py
├── subpackage_2
│ ├── test21.py
│ └── test22.py
└── subpackage_3
├── test31.py
└── test32.py
如果我们使用最直接的导入方式,将整个文件拷贝到工程目录下,然后直接导入:
from mypackage.subpackage_1 import test11
from mypackage.subpackage_1 import test12
from mypackage.subpackage_2 import test21
from mypackage.subpackage_2 import test22
from mypackage.subpackage_3 import test31
from mypackage.subpackage_3 import test32
这样的话,看起来就会很麻烦,查找的时候也会麻烦,此时__init__.py就起到了简化的作用。
2.1init.py 是怎么工作的?
实际上,如果目录中包含了__init__.py时,当用 import 导入该目录时,会执行__init__.py里面的代码。我们在mypackage目录下增加一个__ 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,如果执行了该文件就会输出
print("You have imported mypackage")
下面直接用交互模式进行 import
>>> import mypackage
You have imported mypackage
很显然,__init__.py在包被导入时会被执行。
2.2 控制模块导入
我们再做一个实验,在 mypackage/init.py 添加以下语句:
from subpackage_1 import test11
我们导入 mypackage 试试:
>>> import mypackageTraceback (most recent call last):
File "<stdin>", line 1, in <mole>
File "/home/taopeng/Workspace/Test/mypackage/__init__.py", line 2, in <mole>
from subpackage_1 import test11ImportError: No mole named 'subpackage_1'
报错了。。。怎么回事?
原来,在我们执行import时,当前目录是不会变的(就算是执行子目录的文件),还是需要完整的包名。
from mypackage.subpackage_1 import test11
综上,我们可以在init.py 指定默认需要导入的模块
2.3 偷懒的导入方法
有时候我们在做导入时会偷懒,将包中的所有内容导入
from mypackage import *
这是怎么实现的呢?__all__变量就是干这个工作的。
__all__关联了一个模块列表,当执行from xx import *时,就会导入列表中的模块。我们将__init__.py修改为 :
__all__ = ['subpackage_1', 'subpackage_2']
这里没有包含subpackage_3,是为了证明__all__起作用了,而不是导入了所有子目录。
>>> from mypackage import *
>>> dir()['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'subpackage_1', 'subpackage_2']
>>>
>>> dir(subpackage_1)['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
子目录的中的模块没有导入!!!
该例子中的导入等价于:from mypackage import subpackage_1, subpackage_2
因此,导入操作会继续查找 subpackage_1 和 subpackage_2 中的__init__.py并执行。(但是此时不会执行 import *)
我们在 subpackage_1 下添加__init__.py文件:
__all__ = ['test11', 'test12']# 默认只导入test11
from mypackage.subpackage_1 import test11
再来导入试试
>>> from mypackage import *
>>> dir()['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'subpackage_1', 'subpackage_2']
>>>
>>> dir(subpackage_1)['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'test11']
如果想要导入子包的所有模块,则需要更精确指定。
>>> from mypackage.subpackage_1 import *
>>> dir()['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'test11', 'test12']
3. 配置模块的初始化操作
在了解了__init__.py的工作原理后,应该能理解该文件就是一个正常的python代码文件。
因此可以将初始化代码放入该文件中。
‘陆’ python程序包中为什么会有__init__.py,这个有什么作用
__init__.py的作用有如下几点:
1. 相当于class中的def __init__(self):函数,用来初始化模块。
2. 把所在目录当作一个package处理
3. from-import 语句导入子包时需要用到它。 如果没有用到, 他们可以是空文件。
如引入package.mole下的所有模块
from package.mole import *
这样的语句会导入哪些文件取决于操作系统的文件系统. 所以我们在__init__.py 中加入 __all__变量.
该变量包含执行这样的语句时应该导入的模块的名字. 它由一个模块名字符串行表组成.
‘柒’ python里面 init的用法
打少了一个下划线,应该是__init__,如果写成_init_,则在建立对象时不会得到调用,也就不能初始化hungry.
‘捌’ python3.3中_init_的用法
__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。注意,这个名称的开始和结尾都是双下划线。
def __init__(self):
self.name='lyl'
def sayhi(self):
print('hello,my name is',self.name)
‘玖’ python脚本下面的 __init__.py 有什么作用呢
_init_.py的作用:
首先一旦创建一个python的package,就会出来一个_init_.py的文件
init.py里面一般写这两句话:
[1]:from .girl import hello
[2]:from .girl import *
[1]
一个是导入该package下的girl文件的hello函数
[2]
一个是导入该package下的girl文件的所有函数
比如在bb.py这个文件中导入girl的hello函数
原来init.py文件为空时:方法如下:
from boy.girl import hello
当写成【1】时:
from boy import hello
两者的关系时一致的。
至于第一个init.py有导入的作用,但我认为意义不大,
所以当前认为init.py最大的作用是区别该文件夹是package,还是纯粹的目录。