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

    # 单例模式 节省内存,节省开销,限制只能实例化一个对象
    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/

  • 相关阅读:
    各种居中
    React 高阶组价详解
    node 基本操作
    Spring中Quartz的配置
    Java总结篇系列:Java多线程(二)
    Java总结篇系列:Java多线程(一)
    使用 VisualVM 进行性能分析及调优
    Nginx负载均衡配置实例详解
    使用Jenkins配置自动化构建
    Zabbix中文使用手册
  • 原文地址:https://www.cnblogs.com/chen55555/p/10289777.html
Copyright © 2011-2022 走看看