반응형

클래스의 단일 인스턴스를 제공하는 방법에는 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
Posted by Real_G