• 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>

  • 相关阅读:
    Linux安装.net core
    在IIS中如何配置SSL(https)
    Lambda的前世今生
    Java建造者模式
    leetcode 83 Remove Duplicates from Sorted List
    【设计】Office
    【设计】简书品牌重构
    【设计总结】
    【交互设计】
    【设计总结】
  • 原文地址:https://www.cnblogs.com/tuzkee/p/2892547.html
Copyright © 2020-2023  润新知