5

インポートの仕組みについて少し混乱しています。推定:

package/
    __init__.py
    file1.py

__init__.py

from file1 import AClass
__version__ = '1.0'

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

私がそれを使用する場合from . import __version__file1.py、単に言うだけImportError: cannot import name __version__です。

4

2 に答える 2

6

import両方のファイルが相互に試行するため、循環依存関係があります。__version__たとえば、別のモジュールに移動しpackage/version.py、それを他の両方にインポートします

from .version import __version__
于 2012-09-05T15:58:26.863 に答える
4

試す:

__version__ = '1.0'
from file1 import AClass

モジュールをインポートする前に定数を割り当てる必要があります。これにより、モジュールをインポートしようとしたときに所定の位置に配置されます。

EDIT:循環依存を避けるためのlarsmansの提案は良い考えです。

于 2012-09-05T15:58:40.013 に答える