我已经挖自己变成一个相当孔在这里。
我工作中的PyDev一个Python / Kivy应用。
该应用程序运行过很多系统(10),所以我推他们到一个引擎来处理一切。
为了便于操作,我抢通孔(最差)单身发动机
main.py
#main.py
from code import engine
class MyApp(App):
def build(self):
engine.GetInstance().Initialize()
if __name__ == '__main__':
MyApp().run()
engine.py
#engine.py
from code import system1
from code import system2
gEngineInstance = None
def GetInstance():
global gEngineInstance
if (gEngineInstance == None):
gEngineInstance = Engine()
return gEngineInstance
class Engine():
mSystem1 = None
mSystem2 = None
def Initialize(self):
self.mSystem1 = system1.System1()
self.mSystem2 = system2.System2()
# Omitted
抱歉,系统这导致一些讨厌的循环依赖。
主要有创建引擎,并了解它,它运行的发动机进口,运行该系统的进口。 问题:系统进口然后导入引擎,循环引用。
system1.py
#system1.py
from code import engine
class System1():
def SomeMethod(self):
engine.GetInstance().mSystem2.DoThings()
你得到的图片。 我绕过这个,现在这个可怕的代码,所有的地方:
system1.py
#system1.py
class System1():
def SomeMethod(self):
from code import engine
engine.GetInstance().mSystem2.DoThings()
这将停止进口情况的发生,直到该线,这是很好的,但它看起来错误,eveyrthing感觉就像我做的事情是错误的。
我很想只是传递引擎为每一个系统构造参考,但多数民众赞成有点重构的,我想知道是否有解决这种单/循环引用问题,对未来的更体面的方式。