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的模块是天然的单例模式

     
  • 相关阅读:
    Binary Tree Inorder Traversal
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Majority Element
    Excel Sheet Column Number
    Reverse Bits
    Happy Number
    House Robber
    Remove Linked List Elements
    Contains Duplicate
  • 原文地址:https://www.cnblogs.com/2014-02-17/p/7070976.html
Copyright © 2011-2022 走看看