여기 wxPython 클래스를 서브 클래 싱하고 singleton
이라는 클래스 메서드를 정의합니다.서브 클래 싱 가능한 싱글 톤은 어떻게 구현합니까?
class AddressCellAttr(wx.grid.GridCellAttr):
_instance = None
def __init__(self):
wx.grid.GridCellAttr.__init__(self)
self.SetTextColour('#0000FF')
@classmethod
def singleton(cls):
if cls._instance == None:
cls._instance = cls()
return cls._instance
class ValidAddressCellAttr(AddressCellAttr):
def __init__(self):
AddressCellAttr.__init__(self)
self.SetTextColour('#00FF00')
class CorrectedAddressCellAttr(AddressCellAttr):
def __init__(self):
AddressCellAttr.__init__(self)
self.SetTextColour('#FFFF00')
class InvalidAddressCellAttr(AddressCellAttr):
def __init__(self):
AddressCellAttr.__init__(self)
self.SetTextColour('#FF0000')
class UnparsableAddressCellAttr(AddressCellAttr):
def __init__(self):
AddressCellAttr.__init__(self)
self.SetTextColour('#555555')
나머지 클래스는 첫 번째 하위 클래스의 하위 클래스입니다. 싱글 톤 클래스 메소드는 클래스에서 작동하기 때문에 모든 서브 클래스에서도 작동 할 것이라고 생각했습니다. 서브 클래스는 사실 별도의 클래스입니다.
AddressCellAttr
에서 singleton
을 한 번 호출하면 싱글 톤 메서드는 모든 하위 클래스에서도 동일한 개체를 반환합니다. 왜 이런 일이 생길까요?
-1 싱글 톤의 뻔뻔스럽고 불건전 한 남용과 세상에이 괴물을 괴롭히는 데 도움이되도록하기 위해. – cHao
@cHao : sr2222의 답변에 대한 최신 의견을 읽으십시오. 단점을 사용하는 것보다 내 문제를 해결하는 더 좋은 방법을 설명 할 수없는 경우 제외 투표를 제거하십시오. – Hubro