`__init__`对目录有什么不同?

时间:2011-10-18 06:59:01

标签: python package init

在python中,包含一个或多个模块的目录有时会有__init__.py,因此可以将目录视为python package,这是正确的吗? __init__有什么不同? (还有一个Q,是一个python模块,只是一个python代码文件,有相关的,可能是独立的(对其他文件)一组类,函数和变量?)

2 个答案:

答案 0 :(得分:4)

以下是explanation为什么需要__init__.py

  

需要__init__.py个文件才能使Python将目录视为包含包;这样做是为了防止具有通用名称的目录(例如string)无意中隐藏稍后在模块搜索路径上发生的有效模块。在最简单的情况下,__init__.py可以只是一个空文件,但它也可以执行包的初始化代码或设置__all__变量,稍后将对此进行描述。

正如我刚刚推荐的另一张海报,tutorial on modules非常有用。

答案 1 :(得分:2)

此外,__init__.py的内容在被视为模块时成为包的内容,即somepackage/__init__.py的内容将在dir(somepackage)中找到import somepackage }。

模块本身可以是Python代码specially-crafted C code,也可以由加载Python VM的可执行文件注入an artificial construct