2015-12-10 217 views
1

我有一個全球性的(不是類)蟒蛇叫控制器模塊,其中進口ClassA的ClassB的爲intantiating。我也進口控制器裏面類A類B更新全局變量。如何避免這種循環依賴?

from Controller import setElement 
from Tkinter import * 

ClassA(object): 
    def __init__(self): 
     root = Tk() 
     setElement("Oval") 
     root.mainloop() 

ClassB(object): 
    def __init__(self): 
     root = Tk() 
     setElement("Round") 
     root.mainloop() 

from subclasses import ClassA, ClassB 

_element = None 

def setElement(element): 
    _element = element 
    check() 

def check(): 
    if _element == "Round": 
     instance = ClassA 

    elif _element == "Oval": 
     instance = ClassB 

那麼,有一個非常簡單的方法來重構它。我不想將全局變量移動到一個新文件中,然後在變量發生變化的情況下使用while循環進行檢查。我讀過關於觀察者的文章,但我認爲(希望)有一個更簡單的方法。

+0

你是類定義是不正確的,你的第二代碼塊中的'import'語句也不能工作。你是否試圖從block1導入A,B'? – Takis

+0

這只是一個例子來證明我的問題。我忘了從*寫。 eddited- – Sens4

回答

0

如何回合

def check(): 
    if _element == "Round": 
     instance = __import__("ClassA") 

    elif _element == "Oval": 
     instance = __import__("ClassB") 

,並在頂部擺脫進口的?

+0

但仍然存在一個問題。在我的ClassA/B中出現以下錯誤:instance = getattr(import_module(「ClassA/B」) AttributeError:'module'對象沒有屬性'ClassA/B',所以導入循環仍然存在。 – Sens4