zoukankan      html  css  js  c++  java
  • python 单例模式

    可以使用__new__来实现Singleton单例模式:
    class Singleton(object):
        _singletons = {}
        def __new__(cls):
            if not cls._singletons.has_key(cls):            #若还没有任何实例
                cls._singletons[cls] = object.__new__(cls)  #生成一个实例
            return cls._singletons[cls]                             #返回这个实例

     

    1 使用__new__方法

    class Singleton(object):
        def __new__(cls, *args, **kw):
            if not hasattr(cls, '_instance'):
                orig = super(Singleton, cls)
                cls._instance = orig.__new__(cls, *args, **kw)
            return cls._instance
     
    class MyClass(Singleton):
        a = 1
    

      

    2 共享属性

    创建实例时把所有实例的__dict__指向同一个字典,这样它们具有相同的属性和方法.

    3 装饰器版本

    def singleton(cls, *args, **kw):
        instances = {}
        def getinstance():
            if cls not in instances:
                instances[cls] = cls(*args, **kw)
            return instances[cls]
        return getinstance
     
    @singleton
    class MyClass:
      ...
    

      

    4 import方法

    作为python的模块是天然的单例模式

     
  • 相关阅读:
    云原生网关 Kong 和Kong 管理UI 的完全安装攻略
    微服务最强开源流量网关Kong
    如何在java中判断一个字符串是否是数字
    设计模式之责任链模式讲解
    我的第一个react native
    封装缓动动画3
    封装缓动动画2
    封装缓动动画1
    获取用户选中的文字内容
    窗口事件onresize
  • 原文地址:https://www.cnblogs.com/2014-02-17/p/7070976.html
Copyright © 2011-2022 走看看