赞
踩
其它章节
通常在python项目的源代码子目录下都看到1个__init__.py
文件,django-admin startproject 命令生成的项目结构中也有__init__.py
文件,
那么,为什么要加1个__init__.py`文件,其究竟有什么用,应该向里面写什么内容呢?
__init__.py
文件的作用__init__.py
文件,如果与类定义相比,它相当于是 python package 的constructor 构造方法, 其作用是,告诉python解释器,要把本目录下哪些的函数导进包,以及这些函数位于哪些文件中。
__init__.py
文件可以为空.- 不能把其它同级目录的文件导入此package中。
下面用实例来说明 __init__.py
是如何工作的,以及应该写什么内容。
__init__.py
文件中,导入需要的模块在 my_package/__init__,.py
中,输入以下代码,将此目录下.file1, .file2,.file3文件的函数 func_1, func_2, func_3 导入包my_package,但不包含其它函数模块
from .file1 import func_1
# Where func_1 is the name of the function and .file1 is the name of the module/file
from .file2 import func_2
from .file3 import func_3
这种方式,只是导入了代码文件中所需要的模块。
让我们用实例来看看,导入模块的另1种方式:
在package目录下,创建1个main,.py , 在main.py中直接导入整个 my_package,下例中,可以看到,前面例子中没有的,func_5() 也导入了。
import my_package # this imports the entire module
# 调用func_1()
my_package.func_1()
my_packagee.func_2()
my_packagee.func_3()
my_packagee.func_5()
__all__
参数Python解释器在导入包时,如果 __init__.py
中设置__all__
列表变量, 则 from package import *
语句导入__all__
中包含的所有模块或全局变量。如, __all__ = ["func_1", "func_2", "func_3"]
,然后在 main.py 中 from my_package import *
执行时,最终只有3个模块被导入:
from my_package import *
my_packagee.func_1()
my_packagee.func_2()
my_packagee.func_3()
在实际编写代码时,尽量不要用import *
来导入包中所有模块与全局变量,以避免未知的命名冲突。
示例项目文件结构如下:
sample/
├── docs/
├── main.py
├── my_package2/
│ ├── __init__.py
│ └── create.py
如果 main.py中需要调用子目录 my_package2下的create方法, my_package2子目录下必须有1个__init__,py
文件,然后才能在main,py中导入, 这就是为什么项目的源代码子目录下总放1个 __init__,py
文件的原因。
main.py 的 import 代码如下:
from my_package2 import create
# or
importmy_package2.create
----如果不妥之处,欢迎指正---
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。