1
我在這裏挖了一個洞。Python,圓形依賴關係和單身人士
我正在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
Unfortunatley發動機,這導致一些討厭循環依賴。
主要有創建引擎,並瞭解它,它運行引擎進口,它運行系統導入。 問題:系統導入然後導入引擎,循環引用。
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感覺就像我做錯事一樣。我試圖通過引擎作爲每個系統構造函數的引用,但是這有點重構,我想知道是否有更體面的方式來解決這種單例/循環引用問題爲將來。
這是一個有趣的想法。有些關於這些動態語言的東西很難與我一起工作,但有時,沒有嚴格的類型是非常方便的工具。我會給這個鏡頭,謝謝! – MintyAnt 2013-03-05 05:40:14