浏览 5791 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-21
最后修改:2009-07-21
模块包: 包通常总是一个目录,目录下为首的一个文件便是 __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 文件会在导入时被执行。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-22
....据说一个module也有__all__。所以在python中package和module好像区别不大,而__init__.py似乎是想让package和module看起来差不多而已。
|
|
返回顶楼 | |
发表时间:2009-08-11
你们这些人都不看书的么
|
|
返回顶楼 | |
发表时间:2009-10-16
惭愧了,我搞了2年也不知道,学习了。
|
|
返回顶楼 | |