python에서의 singleton pattern
클래스의 단일 인스턴스를 제공하는 방법에는 factory 함수를 만드는 방법이 있습니다. 예를 들어 아래쪽 불끈이님께서 만드신 NaverDic()이 좋은 예라고 할 수 있습니다. 물론 factory함수는 객체의 반복적인 초기화 작업까지 도울 수 있습니다.
python cookbook에서는 단일 인스턴스를 제공하기 위한 다른 방법을 제시해 주는데요. 이미 아시겠지만 singleton pattern입니다. design patterns와 같은 책에서 잘 설명해주고 있는 패턴입니다. (사실 python cookbook에서는 avoiding the singleton에 대한 내용이 소개되고 있습니다. 아직 공부하지 않은 거라... ^^; )
inner class를 구현하고 클래스 레벨(객체 레벨이 아님)에서 한번만 creation하는 방법입니다.
class OuterClass:
class InnerClass:
data = 10
inner = InnerClass() # inner class는 한번만 생성됩니다.
# __getattr__, __setattr__은 outer class에 대한 요청을 inner class로
# 위임(delegation)합니다. 다른 언어에서는 delegate구현하는 것도 귀찮은 작업인데... ^^
# 역시 간편한 파이썬
def __getattr__(self, attr):
return getattr(self.inner, attr)
def __setattr__(self, attr, value):
setattr(self.inner, attr, value)
def getInnerId(self):
return id(self.inner)
outer1 = OuterClass()
outer2 = OuterClass()
outer1.data =100
# id()는 객체의 고유 아이디를 반환합니다.
print "outer1 id:", id(outer1)
print "outer1.data:", outer1.data
print "outer1 inner id:", outer1.getInnerId()
print "outer2 id:", id(outer2)
print "outer2.data:", outer2.data
print "outer2 inner id:", outer2.getInnerId()
'Python' 카테고리의 다른 글
wxPython -1 (wxPython설치) (0) | 2007.04.12 |
---|---|
[wxPython] 네이버 사전 (0) | 2007.04.12 |
[wxPython] 빈 Frame을 만들자 (0) | 2007.04.12 |