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>

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

  • 相关阅读:
    ZYNQ. Interrupt(1)Private Timer
    RaspberryPi.1.开机与远程桌面
    ZYNQ. DMA基本用法
    ZYNQ. LwIP.PHY.KSZ9031RNX
    Verilog笔记.三段式状态机
    c语言.函数指针数组
    c语言学习笔记.链表.
    D3D基本框架:即D3D头文件分类
    win32窗口:关于鼠标定位位置偏移问题的原因及解决方法
    <转>C++基础知识: 引用
  • 原文地址:https://www.cnblogs.com/LCboss/p/12625906.html
Copyright © 2011-2022 走看看