python 的 __init__.py 的使用说明
来源:互联网 发布:java new date 编辑:程序博客网 时间:2024/05/17 04:03
python __init__.py的使用
原创在这里:http://www.cnblogs.com/no13bus/archive/2013/03/14/2958618.html
1. 如何使一个目录变成包,如何import
在目录下, 放一个__init__.py文件, 这该目录会被认为包. \_\_init__.py文件, 可以为空. 当一个包被import的时候, 会首先加载它的__init__.py文件, 一般可以在__init__.py文件中进行初始化. 需要用到包中模块,import的时候使用"."分割. 比如: Sound/ 包 |-- Effects Sound的一个子包 | |-- __init__.py | |-- errors.py | `-- iobuffer.py |-- Filters Sound的一个子包 | |-- __init__.py | |-- dolby.py | |-- equalizer.py | |-- karaoke.py | `-- vocoder.py |-- Utils Sound的一个子包 | |-- __init__.py | |-- echo.py | |-- reverse.py | `-- surround.py `-- __init__.py 文件夹下放一个__init__.py文件, 则此文件夹为包
需要用到Sound/Utils/echo.py, 则:
import Sound.Utils.echo
2. __init__.py的all变量
__all__: __init__.py的常用变量all指定的是指此包被import * 的时候, 哪些模块会被import进来.
举例: Sound/__init__.py是一个空文件, 则:
>>> from Sound import * >>> dir() ['__builtins__', '__doc__', '__name__']
在Sound/init.py中, 写一行:
__all__ = ['Effects', 'Filters', 'Utils']
则:
>>> from Sound import * >>> dir() ['Effects', 'Filters', 'Utils', '__builtins__', '__doc__', '__name__']
3. __init__.py的path变量
__path__: __init__.py的常用变量path, 默认情况下只有一个元素, 就是当前包的路径, 修改path, 可以修改此包内的搜索路径.
举例:
在Utils下增加2个目录Linux和Windows, 并各有一个echo.py文件, 目录如下
Sound/Utils/ |-- Linux 目录下没有__init__.py文件, 不是包, 只是一个普通目录 | `-- echo.py |-- Windows 目录下没有__init__.py文件, 不是包, 只是一个普通目录 | `-- echo.py |-- __init__.py |-- echo.py |-- reverse.py `-- surround.py 三个echo.py的文件内容如下: ltt@hz171-14:~/tmp$ cat Sound/Utils/echo.py print "I'm Sound.Utils.echo" ltt@hz171-14:~/tmp$ cat Sound/Utils/Windows/echo.py print "I'm Windows.echo" ltt@hz171-14:~/tmp$ cat Sound/Utils/Linux/echo.py print "I'm Linux.echo"
Sound/Utils/init.py是空文件,则结果如下:
>>> import Sound.Utils.echo I'm Sound.Utils.echo
把Sound/Utils/init.py改成:
import sys import os print "Sound.Utils.__init__.__path__ before change:", __path__ dirname = __path__[0] if sys.platform[0:5] == 'linux': __path__.insert( 0, os.path.join(dirname, 'Linux') ) else: __path__.insert( 0, os.path.join(dirname, 'Windows') ) print "Sound.Utils.__init__.__path__ AFTER change:", __path__
则结果如下:
>>> import Sound.Utils.echo Sound.Utils.__init__.__path__ before change: ['Sound/Utils'] Sound.Utils.__init__.__path__ AFTER change: ['Sound/Utils/Linux', 'Sound/Utils'] I'm Linux.echo
这里优先linux路径下的echo,和__path__里的顺序有关,insert(0,…)插入的时候,把linux出入到了一开始dirname前面,所以linux的echo先一步输出,若插入到后面则输出的是外面的echo
阅读全文
0 0
- python 的 __init__.py 的使用说明
- python的__init__.py
- Python:__init__.py的作用
- Python __init__.py的作用
- 初探python的__init__.py
- Python的__init__.py 文件
- python中__init__.py文件的作用
- python中__init__.py文件的作用
- python __init__.py文件的作用
- python 包的引用 __init__.py
- python中__init__.py文件的作用
- Python中__init__.py文件的作用
- python中__init__.py文件的作用
- Python的基础—__init__.py介绍
- python文件夹中__init__.py的用处
- __init__.py的作用
- __init__.py的使用
- python __init__.py的作用 distutils 的使用
- SSE指令速查
- Winsock编程基础介绍
- 写knn时遇到的一些问题
- 优化器
- java项目中嵌入FineReport无法显示
- python 的 __init__.py 的使用说明
- 关于app自动化测试pageObject设计模式
- Restful风格API接口开发springMVC篇
- LeetCode200. Number of Islands
- 初学java:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
- RPM方式安装MySQL5.6
- 解决Android APP启动出现白屏或黑屏的问题
- 前端面试题-滴滴二面
- java 常见单词收集