2012-07-13 59 views
1

我卡住進口,不知道如何解決這個問題。Python設計 - 跨進口

我有3個模塊:

  1. test_project.py
  2. modules/__init__.py
  3. r.py
  4. module.py
  5. module_configuration.py

的依賴新生列表否認:

test_project.py IMPORTS modules/__init__.py 
modules/__init__.py IMPORTS r.py 
r.py IMPORTS > module_configuration.py 
module_configuration.py IMPORTS > modules/__init__.py 

因此,您可以看到,我們在此處有一個循環導入。

  • modules/__init__.py保留類定義的字典(像R類)。
  • R類可以在其構造
  • ModuleConfiguration需要從modules/__init__.py類字典ModuleConfiguration的實例。

錯誤消息我得到:

ERROR: controller.test_project (unittest.loader.ModuleImportFailure) 
---------------------------------------------------------------------- 
ImportError: Failed to import test module: controller.test_project 
Traceback (most recent call last): 
File "/usr/lib/python2.7/unittest/loader.py", line 252, in _find_tests 
module = self._get_module_from_name(name) 
File "/usr/lib/python2.7/unittest/loader.py", line 230, in 
_get_module_from_name__import__(name) 
File "/media/103AEB9B3AEB7C5A/Projekty/c/svn/tests/controller/test_project.py",  
line 9, in <module> 
from c.core.modules import MODULES 
File "/media/103AEB9B3AEB7C5A/Projekty/c/svn/tests/../c/core/modules/__init__.py", line 5, in <module> 
from R import R 
File "/media/103AEB9B3AEB7C5A/Projekty/c/svn/tests/../c/core/modules/R.py", line 6, in <module> 
from c.core.module import Module 
File "/media/103AEB9B3AEB7C5A/Projekty/c/svn/tests/../c/core/module.py", line 13, in <module> 
from c.core.module_configuration import ModuleConfiguration 
File "/media/103AEB9B3AEB7C5A/Projekty/c/svn/tests/../c/core/module_configuration.py", line 7, in <module> 
from c.core.modules import MODULES 

ImportError: cannot import name MODULES 

如何解決它的任何想法?

+1

那麼...這是一個問題呢? – 2012-07-13 13:21:55

回答

1

不是在模塊加載時創建實例,而是實現返回相關結果的函數,並將這些函數保留在它們各自的模塊中。然後,一旦模塊被加載,所有東西都可以使用。 從moduleB從moduleB和moduleB導入moduleA沒有任何問題。 您是否需要必須在模塊加載時創建的模塊全局對象?這通常是不需要的。相反,嘗試構建全部模塊就位後首次使用時需要的全局模塊。

+0

我在說的字典只保留類名,而不是實例。我需要它,因爲我通過這個列表GUI和GUI使組合框選擇項目,每個項目都有它自己的類。這就是爲什麼我需要類名和'key'之間的鏈接。 – 2012-07-13 13:51:01

+1

只需讓每個模塊首先加載其需要的其他模塊,然後在需要的模塊末尾調用該方法來設置這些類的列表。你面對的確切問題是什麼? – 2012-07-13 13:53:11

+0

用這些類名設置字典我實際上需要它導入。但我想我知道你的意思,我可以在模塊中使用class item導入MODULES,並將這個類名追加到MODULES,所以我不必在'modules/__ init __。py'中導入類名。哇,太簡單了,謝謝!有時候這只是壓倒我。 – 2012-07-13 14:04:39