首页 > 技术文章 > python中的单例模式

chen55555 2019-01-18 21:18 原文

# 单例模式 节省内存,节省开销,限制只能实例化一个对象
class A:
    __instance = None

    def __init__(self, name,):
        self.name = name

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            obj = object.__new__(cls)  # 没有对象创建一个对象
            cls.__instance = obj
        return cls.__instance  # 已经有对象返回原来的对象


ret1 = A('aaa')
ret2 = A('bbb')
ret3 = A('ccc')
print(ret1)
print(ret2)
print(ret3)
print(ret1.name)
print(ret2.name)
print(ret3.name)

 补充__new__ 构造方法

# __new__ 构造方法

# 1, 类名() 执行object.__new__方法,开辟的对象空间并返回
# 2,自动执行__init__方法,将空间创给self
# 3,在__init__给对象封装属性。
# object
class A:
    def __init__(self,name):
        self.name = name
        print('in A __init__')

    def __new__(cls, *args, **kwargs):
        print('in A __new__')
        return object.__new__(cls)


a = A('rock')
print(a.name)

 

pytho线程安全的单例模式

# coding:utf-8
import threading


def synchronized(func):

    func.__lock__ = threading.Lock()

    def lock_func(*args, **kwargs):
        with func.__lock__:
            return func(*args, **kwargs)
    return lock_func


class Singleton(object):
    """
    单例模式
    """
    instance = None

    @synchronized
    def __new__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = object.__new__(cls, *args, **kwargs)
        return cls.instance

  

 参考 http://funhacks.net/2017/01/17/singleton/

推荐阅读