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 *

哪个工作正常,但是当我尝试创建 in 的实例CommonClassTestClass

   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 回答