class Singleton(type):
    def __call__(cls, *args, **kwargs):
        print "Singleton call"
        if not hasattr(cls, 'instance'):
            cls.instance = super(Singleton, cls).__call__(*args, **kwargs)
        return cls.instance
    def __new__(cls, name, bases, dct):
        print "Singleton new"
        return type.__new__(cls, name, bases, dct)

    def __init__(cls, name, bases, dct):
        print "Singleton init"
        super(Singleton, cls).__init__(name, bases, dct)

class Cache(object):
    __metaclass__ = Singleton
    def __new__(cls, *args, **kwargs):
        print "Cache new"
        return object.__new__(cls, *args, **kwargs)
    def __init__(cls, *args, **kwargs):
        print "Cache init"
    def __call__(cls, *args, **kwargs):
        print "Cache call"

print Cache()
print Cache()

 

 输出:

Singleton new
Singleton init
Singleton call
Cache new
Cache init
<__main__.Cache object at 0x01CDB130>
Singleton call
<__main__.Cache object at 0x01CDB130>

相关文章:

  • 2022-01-20
  • 2021-11-08
  • 2021-12-07
  • 2021-10-21
  • 2022-12-23
  • 2021-10-26
  • 2022-12-23
  • 2022-01-20
猜你喜欢
  • 2022-12-23
  • 2022-01-26
  • 2022-12-23
  • 2021-11-01
  • 2021-05-27
  • 2021-09-06
  • 2022-01-03
相关资源
相似解决方案