Python中的 __all__和__path__ 解析
来源:互联网 发布:淘宝新店靠谱的推广 编辑:程序博客网 时间:2024/05/17 01:27
Python以目录来组织模块, 就是所谓的包. 用包的一大好处: 可以解决名字空间冲突的问题, 即文件重名问题.
下面主要说3点:
1. 如何使一个目录变成包,如何import
目录下放一个__init__.py文件(内容可以为空), import包内模块的时候使用"."分割, 比如import Apackage.Amodule
2. __init__.py的__all__变量
__all__指定的是指此包被import * 的时候, 哪些模块会被import进来
3. __init__.py的__path__变量
__path__指定了包的搜索路径
下面是以举例的方法来介绍:
在目录下, 放一个__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, 则:
importSound.Utils.echo2. __init__.py的__all__变量
__all__: __init__.py的常用变量__all__指定的是指此包被import * 的时候, 哪些模块会被import进来.
举例:
Sound/__init__.py是一个空文件, 则:
>>>dir()
['__builtins__','__doc__','__name__']
在Sound/__init__.py中, 写一行:
__all__=['Effects','Filters','Utils']则:
>>>fromSoundimport*
>>>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$catSound/Utils/echo.py
print"I'm Sound.Utils.echo"
ltt@hz171-14:~/tmp$catSound/Utils/Windows/echo.py
print"I'm Windows.echo"
ltt@hz171-14:~/tmp$catSound/Utils/Linux/echo.py
print"I'm Linux.echo"
Sound/Utils/__init__.py是空文件,则结果如下:
>>>importSound.Utils.echo
I'm Sound.Utils.echo
把Sound/Utils/__init__.py改成:
importos
print"Sound.Utils.__init__.__path__ before change:",__path__
dirname=__path__[0]
ifsys.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__
则结果如下:
>>>importSound.Utils.echoSound.Utils.__init__.__path__beforechange:['Sound/Utils']
Sound.Utils.__init__.__path__AFTERchange:['Sound/Utils/Linux','Sound/Utils']
- Python中的 __all__和__path__ 解析
- Python中的 __all__和__path__ 解析
- Python中的 __all__和__path__ 解析
- python相对导入/绝对导入以及__init__.py中的__all__和__path__变量以及sys.path搜索路径
- python中的__all__和__slots__
- python中的__all__和__slots__
- python中的__all__和__slots__
- python中的__all__与__import__
- 【python】__all__
- Python __all__
- python __all__
- Python – __all__ function
- 20 Python __all__
- python __all__的用法
- pyhon中的__all__
- python关于__all__的定义
- 【Python】用 __all__ 暴露接口
- python里__all__ 属性用法
- Python语言学习讲解三:详解Python中的split()函数的使用方法
- 当file_get_contents或者simplexml_load_file的时候乱码
- 获取用户的IP地址
- 关于 iOS 10 中 ATS 的问题
- 响应式页面之媒体查询二
- Python中的 __all__和__path__ 解析
- MYSQL、ORACLE加载驱动和加载连接地址
- ulimit 的功能和用法
- Gson对象转成Java复杂对象出错
- Superior Scheduler学习心得 原创
- 看懂SqlServer查询计划
- 【Hacker Rank】08.Print function
- CAS3.5.2 Server登录后返回用户信息详细解决方案
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)