免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2344 | 回复: 0
打印 上一主题 下一主题

Python模块包中__init__.py文件的作用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-26 11:57 |只看该作者 |倒序浏览

[color="#000000"]Python模块包中__init__.py文件的作用

[color="#000000"]http://hi.baidu.com/nkhzj/blog/item/a6f0df00b2c39716728b65f1.html

[color="#000000"]模块包:
[color="#000000"]包通常总是一个目录,目录下为首的一个文件便是 __init__.py。然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。差不多就像这样吧:
[color="#008000"]Package1/ __init__.py
    Module1.py
    Module2.py
    Package2/ __init__.py
       Module1.py
       Module2.py
[color="#000000"]我们可以就这样导入一个包:
[color="#ffa500"]import Package1
[color="#000000"]或者调入一个子模块和子包:
[color="#ffa500"]from Package1 [color="#ffa500"]import Module1[color="#ffa500"]
from Package1 [color="#ffa500"]import Package2[color="#ffa500"]
import Packag1.Module1[color="#ffa500"]
import Packag1.Package2
[color="#000000"]可以深入好几层包结构:
[color="#ffa500"]from Package1.Package2 [color="#ffa500"]import Module1[color="#ffa500"]
import Package1.Package2.Module1
大致就这样吧,我觉得,包的精髓应该是在 __init__.py 这个文件之中的。




__init__.py 文件:

[color="#000000"]__init__.py 控制着包的导入行为。假如 __init__.py 为空,那么仅仅导入包是什么都做不了的。
[color="#ffa500"]>>> [color="#ffa500"]import Package1[color="#ffa500"]
>>> Package1.Module1[color="#ff0000"]
Traceback (most recent call last):
File "", line 1, in ?
Package1.Module1
AttributeError: 'module' object has no attribute 'Module1'
[color="#000000"]我们需要在 __init__.py 里把 Module1 预先导入:
[color="#ffa500"]#文件 __init__.py
import Module1
[color="#000000"]测试:
[color="#ffa500"]>>> [color="#ffa500"]import Package1[color="#ffa500"]
>>> Package1.Module1[color="#0000ff"]

[color="#000000"]__init__.py 中还有一个重要的变量,叫做 __all__。我们有时会使出一招“全部导入”,也就是这样:
[color="#ffa500"]from PackageName [color="#ffa500"]import *
[color="#000000"]这时 import 就会把注册在包 __init__.py 文件中 __all__ 列表中的子模块和子包导入到当前作用域中来。比如:
[color="#008000"]#文件 __init__.py
__all__ = [[color="#008000"]'Module1', [color="#008000"]'Module2', [color="#008000"]'Package2']
[color="#000000"]测试:
[color="#ffa500"]>>>[color="#ffa500"] from Package1 [color="#ffa500"]import *[color="#ffa500"]
>>> Module2[color="#0000ff"]

[color="#000000"]__init__.py 文件会在导入时被执行。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/50916/showart_1743734.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP