7

我有一个包结构如下:

mypackage
  __init__.py
  mymodule.py

例如,我放了一些“常量”声明__init__.py

DELIMITER='\x01'

但是,除非我添加,否则mymodule.py中的代码无法访问 DELIMITER:

from __init__ import *

mymodule.py文件的顶部。我想我在这里错过了一个概念。是不是在通过 import 语句访问之前声明的任何内容__init__.py都不会被读入内存?另外,这是放入__init__.py文件的典型类型吗?

4

2 回答 2

5

Python确实在导入包时运行代码__init__.py,这允许进行一些初始化。但是,仅仅因为它运行并不意味着您可以从其他模块中访问其中的变量。

例如:

testpackage
    __init__.py
    testmod.py

假设__init__.py有代码print "Initializing __init__",并且testmod.pyprint "Initializing testmod"。在这种情况下,导入testpackageortestmod会导致初始化代码运行:

dynamic-oit-vapornet-c-499:test dgrtwo$ python -c "import testpackage"
Initializing __init__
dynamic-oit-vapornet-c-499:test dgrtwo$ python -c "from testpackage import testmod"
Initializing __init__
Initializing testmod

但是,它testmod.py提供从__init__.py. 这必须明确地完成。

于 2012-07-31T19:46:38.293 回答
2

包不会以某种方式将其中的所有模块组合在一起。除非您将其导入,否则没有理由__init__在其他模块中可以访问其中的内容。

于 2012-07-31T19:27:07.030 回答