나는 여기 자신을 파고 들었다.파이썬, 순환 의존성 및 싱글 톤
저는 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
from code import engine
class System1():
def SomeMethod(self):
engine.GetInstance().mSystem2.DoThings()
system1.py 당신은 그림을 얻는다. 내가 사방이 끔찍한 코드로 지금이 우회 :
system1.py이 괜찮 그 라인까지 발생하지 가져 오기를 중지
#system1.py
class System1():
def SomeMethod(self):
from code import engine
engine.GetInstance().mSystem2.DoThings()
하지만 잘못 보이는, eveyrthing 느낌 내가 잘못한 것처럼.
나는 엔진을 모든 시스템 생성자에 대한 참조로 전달하려고하지만 약간의 리팩토링을 가졌으므로 이런 종류의 싱글 톤/순환 참조 문제를 수정하는 데 더 알맞은 방법이 있는지 알고 싶습니다. 미래를위한
이것은 흥미로운 아이디어입니다. 이 동적 언어에 대한 몇 가지 사항은 저에게 맞지 않지만 때로는 엄격한 유형이 아니라는 것이 매우 유용한 도구입니다. 나는 총을 줘, 고마워! – MintyAnt