싱글 톤 패턴을 사용하여 클래스의 인스턴스 생성 수를 하나의 객체로 제한 할 수 있다는 인상하에 있습니다. obj3
및 obj4
이 같은 객체 증명baseclass-subclass 시나리오의 싱글 톤 패턴
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
class base1(object):
__metaclass__ = Singleton
class base2(base1):
pass
class base3(base1):
pass
class base4(base2):
pass
obj1 = base4()
obj2 = base4()
print obj1 is obj2 #prints True
obj3 = base3()
obj4 = base3()
print obj3 is obj4 #prints True
print obj1 is obj3 #prints False
먼저 인쇄 문 인쇄 True
: 그리고 마음에 유지, 아래의 코드를 살펴 있습니다. 그러나 두 번째 print 문은 False
인데 obj1
과 obj3
이 동일하지 않음을 보여줍니다. 목표를 달성하기위한 최선의 방법은 무엇입니까? "Always return the same base1 object no matter which sub class instantiates it"
.
이유도 이러한 서브 클래스를 가질까요? 대칭, 당신이 정말로 싱글 톤을하는 메타 클래스 기반의 시행 경로를 원한다면, 왜 이러한 서브 클래스가 존재하도록 허용합니까? – user2357112
그건 이해가 안돼! 왜 모두가 기본 객체 만 만들 수 있어야만 여러 클래스를 만들 수 있습니까? 기본 클래스의 별칭을 원하십니까? 코드는 계층 구조의 각 ** 클래스에 대해 하나의 싱글 톤 **을 허용하도록 특별히 작성되었습니다. 왜 처음부터 그렇게 프로그래밍 했습니까? – Wombatz