2015-12-10 179 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