用django做开发已经一年多的时间,但基本没注意python模块中__init__.py文件存在的意义,偶然看到对它的介绍吓一大跳,这个文件太重要了
模块包:
包通常总是一个目录,目录下为首的一个文件便是 __init__.py。然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。差不多就像这样吧:
Package1/ __init__.py Module1.py Module2.py Package2/ __init__.py Module1.py Module2.py
我们可以就这样导入一个包:
import Package1
或者调入一个子模块和子包:
from Package1 import Module1from Package1 import Package2import Packag1.Module1import Packag1.Package2
可以深入好几层包结构:
from Package1.Package2 import Module1import Package1.Package2.Module1
大致就这样吧,我觉得,包的精髓应该是在 __init__.py 这个文件之中的。
__init__.py 文件:
__init__.py 控制着包的导入行为。假如 __init__.py 为空,那么仅仅导入包是什么都做不了的。
>>> import Package1>>> Package1.Module1Traceback (most recent call last): File "<pyshell#1>", line 1, in ? Package1.Module1AttributeError: 'module' object has no attribute 'Module1'
我们需要在 __init__.py 里把 Module1 预先导入:
#文件 __init__.pyimport Module1
测试:
>>> import Package1>>> Package1.Module1<module 'Package1.Module1' from 'Module.pyc'>
__init__.py 中还有一个重要的变量,叫做 __all__。我们有时会使出一招“全部导入”,也就是这样:
from PackageName import *
这时 import 就会把注册在包 __init__.py 文件中 __all__ 列表中的子模块和子包导入到当前作用域中来。比如:
#文件 __init__.py__all__ = ['Module1', 'Module2', 'Package2']
测试:
>>> from Package1 import *>>> Module2<module 'Package1.Module2' from 'Module.pyc'>
__init__.py 文件会在导入时被执行。
分享到:
- 2009-07-21 22:27
- 浏览 14655
- 评论(3)
- 论坛回复 / 浏览 (3 / 5792)
- 查看更多
相关推荐
本文实例讲述了Python模块包中__init__.py文件功能。分享给大家供大家参考,具体如下: 用django做开发已经一年多的时间,但基本没注意python模块中__init__.py文件存在的意义,偶然看到对它的介绍吓一大跳,这个...
总结来说,本实验的重点在于理解`__init__.py`文件在创建Python包中的作用,以及如何通过它来定义和组织包的公共属性和接口。通过这样的实践,开发者能够更好地管理和组织大型项目,提高代码的可读性和可维护性。在...
__init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件。 通常__init__.py 文件为空,但是我们还可以为它增加其他的功能。我们在导入一个包时,实际上是导入了它的...
本文将深入探讨Python包的概念、功能,以及`__init__.py`文件的作用和用法。 ### 包的概念与作用 包是Python中的一个重要的组织模块的方式,它本质上是一个包含`__init__.py`文件的文件夹。通过创建包,我们可以将...
假设想要在 `lib` 包中使用 `from lib import *` 的方式导入所有子模块,则可以在 `lib/__init__.py` 中定义如下内容: ```python __all__ = ["mod2", "mod3", "sub"] ``` 这表示当使用 `from lib import *` 时,...
`__init__.py` 文件在Python包中起着标识作用,表明其所在的文件夹是一个Python包,这样Python解释器在导入时就能识别并处理这个包。在PyQt5库中,`__init__.py` 可能包含了对其他模块的导入、设置、注册等操作,以...
3. **添加模块:** 在包目录中添加你需要的Python模块文件。 #### 四、如何使用包 1. **导入整个包:** 你可以通过`import my_package`来导入整个包。此时,你可以通过`my_package.module1`来访问包内的模块。 2. ...
.pyc 是 .py的编译文件 模块的内建属性 __doc__ __name__ # 主要用来判断当前模块是否是主模块 __file__ 模块的文档字符串 模块的 __all__列表 from xxx import * 模块的隐藏属性 以 _ 开头的属性为隐藏...
`__init__.py`文件在包中的作用至关重要: - **标识包**:当一个文件夹包含`__init__.py`(可以是空文件)时,Python识别其为一个包,允许导入其中的模块。 - **初始化**:`__init__.py`可以包含任何Python代码,当...
- **跨包引用**:如果需要从一个包中的模块引用另一个包中的模块,可以在包的`__init__.py`文件中通过修改`sys.path`来解决: ```python import sys sys.path.append('..') ``` #### 五、模块的发布 模块发布...
这个特殊的`__init__.py`文件告诉Python,这个文件夹应该被视为一个包。`__init__.py`可以是空文件,也可以包含初始化代码。例如,我们创建一个名为`mypackage`的包,其结构可能是这样的: ``` mypackage/ __init...
### Python模块添加详解 在Python编程中,模块的管理和导入是一项基本且重要的技能。通过合理的模块组织和导入,可以提高代码的可读性、可维护性和重用性。本文将根据给定的文件内容,深入解析如何在Python中添加和...
1.原来在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有__init__.py那么它就是这个包的子包了。 当你将一个包作为模块导入(比如从...
例如,在一个名为`a`的包中,有子包`b`,其中包含`c.py`和`__init__.py`文件。若在这些文件中都打印出`__name__`的值,可以清晰地展示出它们之间的层次关系。 - 当我们通过命令行执行`python -c "import a.b.c"`时...
在MySQLdb这个包中,`__init__.py`通常包含了导入和初始化其他模块的代码,使用户可以通过`import MySQLdb`的方式来使用整个库。这个文件可能定义了一些基本的配置,以及对其他子模块的导出,比如连接对象、游标对象...
`__init__.py`文件的存在标识了`my_project`、`folder1`和`folder2`是Python包,使得它们的成员可以被导入。 4. **添加路径到sys.path**: 如果你需要导入的模块位于`sys.path`之外,可以通过在程序开始时动态...
- 创建一个新目录,并在其中创建一个名为`__init__.py`的文件,这个目录就变成了一个Python包。 - 如果需要在包内创建子包,只需在子目录中也放置一个`__init__.py`文件。 3. **导入包**: - 使用`.`操作符来...
假设有一个名为 `sound` 的包,其中包含子包 `effects`,子包 `effects` 下有 `__init__.py` 文件以及 `echo.py`, `surround.py`, `reverse.py` 等模块。 `sound/effects/__init__.py` 文件内容如下: ```python _...