【发布时间】:2011-10-18 06:59:00
【问题描述】:
在python中,一个包含一个或多个模块的目录有时会有__init__.py,这样该目录就可以当成一个pythonpackage,这样对吗? __init__ 有什么不同? (还有另一个问题,python 模块是否只是一个 python 代码文件,其中包含相关且可能独立(与其他文件)的类、函数和变量集?)
【问题讨论】:
-
你应该阅读tutorial。
在python中,一个包含一个或多个模块的目录有时会有__init__.py,这样该目录就可以当成一个pythonpackage,这样对吗? __init__ 有什么不同? (还有另一个问题,python 模块是否只是一个 python 代码文件,其中包含相关且可能独立(与其他文件)的类、函数和变量集?)
【问题讨论】:
这里有一个explanation,说明为什么需要__init__.py:
__init__.py文件是 Python 将目录视为包含包所必需的;这样做是为了防止具有通用名称(例如string)的目录无意中隐藏了稍后出现在模块搜索路径上的有效模块。在最简单的情况下,__init__.py可以只是一个空文件,但它也可以执行包的初始化代码或设置__all__变量,稍后会介绍。
正如我刚刚向另一张海报推荐的那样,tutorial on modules 信息量很大。
【讨论】:
另外,__init__.py 的内容在被视为模块时成为包的内容,即当你import somepackage 时,somepackage/__init__.py 的内容将在dir(somepackage) 中找到。
模块本身可以是 Python 代码 specially-crafted C code,也可以是由加载 Python VM 的可执行文件注入的 an artificial construct。
【讨论】: