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

    python中的单例模式有啥作用?

    单例模式保证了在程序的不同位置都可以且仅可以取到同一个对象实例:如果实例不存在,会创建一个实例;如果已存在就会返回这个实例。因为单例是一个类,所以你也可以为其提供相应的操作方法,以便于对这个实例进行管理

    这样会大大节省出内存

    那么怎么实现一个单例模式呢?

    直接用类实现:

    class Singleton:
        _instance = False
    
        def __new__(cls, *args, **kwargs):
    
            if not cls._instance:
                cls._instance = super().__new__(cls)
                return cls._instance
            else:
                return cls._instance
    
    
    a = Singleton()
    b = Singleton()
    print(a)
    print(b)

    打印的内容是:

    <__main__.Singleton object at 0x00B04FB0>
    <__main__.Singleton object at 0x00B04FB0>

    在上面为什么不用__init__方法呢?因为其实在创建对象的时候,会先去执行__new__方法,将对象返回给__init__的,所以我们直接使用new方法才可以

    还有一种直接使用装饰器来实现

    def single_ton(cls):
        _instance = {}
    
        def fun(*args, **kwargs):
            if cls not in _instance:
                _instance[cls] = cls(*args, **kwargs)
                return _instance[cls]
            else:
                return _instance[cls]
    
        return fun
    
    
    @single_ton
    class A:
        def __init__(self):
            pass
    
    
    a = A()
    b = A()
    print(a)
    print(b)

    打印结果:

    <__main__.A object at 0x02CF4EF0>
    <__main__.A object at 0x02CF4EF0>

    以上总结是是两种实现单例模式的方法

  • 相关阅读:
    java 多线程2
    java 多线程1
    java Object
    java 模板
    03015_JSTL技术
    运维人员常用的Linux命令总结
    oracle的userenv和nls_lang详解
    Oracle字符集检查和修改
    sql语句中(+)的作用
    Oracle事务Transaction
  • 原文地址:https://www.cnblogs.com/LCboss/p/12625906.html
Copyright © 2011-2022 走看看