【问题标题】:What differences does `__init__` make to a directory?`__init__` 对目录有什么不同?
【发布时间】:2011-10-18 06:59:00
【问题描述】:

在python中,一个包含一个或多个模块的目录有时会有__init__.py,这样该目录就可以当成一个pythonpackage,这样对吗? __init__ 有什么不同? (还有另一个问题,python 模块是否只是一个 python 代码文件,其中包含相关且可能独立(与其他文件)的类、函数和变量集?)

【问题讨论】:

标签: python package init


【解决方案1】:

这里有一个explanation,说明为什么需要__init__.py

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

正如我刚刚向另一张海报推荐的那样,tutorial on modules 信息量很大。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-23
      • 2018-02-06
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      相关资源
      最近更新 更多