2

サブモジュール内から親モジュールからクラスをインポートする方法を理解するのに少し苦労しています。次のディレクトリ構造があります。

   module/
      __init__.py        (1)
      common.py          (containing testfunc and CommonClass)
      submod/
         __init__.py     (2)
         test.py         (containing TestClass)

私が(1)持っている:

   from common import *

だから私は直接行うことができます:

   import module
   module.testfunc()

私が(2)持っている:

   from test import TestClass

だからmodule私はできる:

   import submod
   class_inst = submod.TestClass()

TestClass(に含まれてtest.pyいます)で のインスタンスを使用したいCommonClassので、最初に次を使用してインポートしてみました:

   from ..common import *

CommonClassこれは正常に動作しますが、 inのインスタンスを作成しようとするとTestClass:

   class TestClass(object):
       def __init__(self):
           self.inst = CommonClass()

エラーが発生します:

   NameError: global name 'CommonClass' is not defined

同様に、代わりに試してみるとfrom ..common import CommonClass、エラーが発生します。

   ImportError: cannot import name CommonClass

私が知る限り、CommonClass内から見えるはずなtest.pyので、なぜ見つからないのかわかりません。の使用法について理解していないことがあると感じています__init__.py。私が犯している明らかな間違いを指摘して助けてくれる人はいますか?

4

1 に答える 1

1

「循環インポート」と言いたいのですが、正確に特定できません。表示されている ImportError は、その症状である可能性があります。一般に、別のものをインポートするモジュールをインポートすると、すべてのインポートを開始したまさにそのモジュールをインポート チェーンがインポートしてしまうと、ImportError が発生します。

コードから他に何もインポートしないCommonClass新しいモジュールに移動して、そこからインポートできますか?module.submod.utils

于 2012-11-15T13:22:09.233 に答える