我对导入工作有点困惑.假设:
package/
__init__.py
file1.py
Run Code Online (Sandbox Code Playgroud)
在__init__.py:
from file1 import AClass
__version__ = '1.0'
Run Code Online (Sandbox Code Playgroud)
在file1.py:
Class AClass(object):
def bar():
# I want to use __version__here, but don't want to pass
# it through the constructor. Is there any way?
pass
Run Code Online (Sandbox Code Playgroud)
如果我使用from . import __version__中file1.py它只是说ImportError: cannot import name __version__.
你有一个循环依赖,因为两个文件import互相尝试.例如,移动__version__到一个单独的模块,package/version.py然后在其他模块中导入
from .version import __version__
Run Code Online (Sandbox Code Playgroud)
尝试:
__version__ = '1.0'
from file1 import AClass
Run Code Online (Sandbox Code Playgroud)
您需要在导入模块之前分配常量,以便在您尝试导入它时它就位。
编辑:拉斯曼建议避免循环依赖是一个好主意。