• python


    类每次实例化的时候都会创建一个对象,如果要类每次实例化的时候只创建一个对象,那么就可以用单例模式

    class MyClass(object):
        instance = None
        def __new__(cls, *args, **kwargs):
            if not cls.instance:
                cls.instance = object.__new__(cls)
                return cls.instance
            else:
                return cls.instance
    
    myclass = MyClass()
    myclass.name = 'lalala'
    print(myclass.name)
    myclass2 = MyClass()
    # myclass2 没有name属性,但也能调用,因为这个类是单例模式
    print(myclass2.name)
    
    
    结果:
    lalala
    lalala

    用装饰器实现单例模式

    def single(cls):
        # 用装饰器实现的单例模式需要保证每一个类调用都能变成单例模式
        # 因此创建一个字典来保存需要变成单例模式的那些类
        instance = {}
    
        def fun(*args, **kwargs):
            # cls即传入的方法,也就是传入的类;当类名不在字典里的时候,说明没有实例化,那就帮它实例化一次
            if cls not in instance:
                instance[cls] = cls(*args, **kwargs)
                return instance[cls]
            else:
                return instance[cls]
    
        return fun
    
    
    @single
    class Test:
        pass
    
    
    t = Test()
  • 相关阅读:
    C#11 特性的早期预览
    Eclipse加速启动
    Summary of CRM 2011 plugin
    centos7上利用snap安装nextcloud,并实现在线编辑
    windows上常用命令
    PYMOL显示底物周围surface
    桥接模式
    建造者模式
    模板方法模式
    适配器模式
  • 原文地址:https://www.cnblogs.com/erchun/p/14088966.html
Copyright © 2020-2023  润新知