Python使用metaclass实现Singleton模式的方法

998次阅读  |  发布于5年以前

本文实例讲述了Python使用metaclass实现Singleton模式的方法。分享给大家供大家参考。具体实现方法如下:


    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>

希望本文所述对大家的Python程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8