#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Singleton(type):
def __init__(cls, name, bases, dict):
super(Singleton, cls).__init__(name, bases, dict)
cls.INSTANCE = None
def __call__(cls, *args, **kwargs):
if cls.INSTANCE is None:
cls.INSTANCE = super(Singleton, cls).__call__(*args, **kwargs)
return cls.INSTANCE
class A(object):
__metaclass__ = Singleton
class B(A):
pass
a = A()
r = A()
b = B()
s = B()
print a is r
print b is s
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgLSotIGNvZGluZzogdXRmLTggLSotCgpjbGFzcyBTaW5nbGV0b24odHlwZSk6CiAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgZGljdCk6CiAgICAgICAgc3VwZXIoU2luZ2xldG9uLCBjbHMpLl9faW5pdF9fKG5hbWUsIGJhc2VzLCBkaWN0KQogICAgICAgIGNscy5JTlNUQU5DRSA9IE5vbmUKCiAgICBkZWYgX19jYWxsX18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgIGlmIGNscy5JTlNUQU5DRSBpcyBOb25lOgogICAgICAgICAgICBjbHMuSU5TVEFOQ0UgPSBzdXBlcihTaW5nbGV0b24sIGNscykuX19jYWxsX18oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgIHJldHVybiBjbHMuSU5TVEFOQ0UKCmNsYXNzIEEob2JqZWN0KToKICAgIF9fbWV0YWNsYXNzX18gPSBTaW5nbGV0b24KCgpjbGFzcyBCKEEpOgogICAgcGFzcwoKYSA9IEEoKQpyID0gQSgpCmIgPSBCKCkKcyA9IEIoKQoKcHJpbnQgYSBpcyByCnByaW50IGIgaXMgcwo=