Python模块包中__init__.py文件 精髓

 原文:http://www.douban.com/group/topic/24075924/                  本人有删改 

参考  http://www.cnblogs.com/tqsummer/archive/2011/01/24/1943273.html


Python    packages   __init__.py


包的精髓在 __init__.py 这个文件 

__init__.py 文件: 

__init__.py 控制着包的导入行为。假如 __init__.py 为空,那么仅仅导入包是什么都做不了的。 

>>> import Package1 

>>> Package1.Module1 

Traceback (most recent call last): 
File "<pyshell#1>", line 1, in ? 
Package1.Module1 

AttributeError: 'module' object has no attribute 'Module1' 

我们需要在 __init__.py 里把 Module1 预先导入: 

#文件 __init__.py 

import 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 文件会在导入时被执行。 


其他参考: 

http://www.cnblogs.com/tqsummer/archive/2011/01/24/1943273.html

   

猜你喜欢

转载自blog.csdn.net/huochuangchuang/article/details/49366555