zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    sparse用法matlab官方说明
    C++双向循环链表
    循环链表以及迭代器的使用c++
    顺序队列c++
    顺序栈c++
    尾插法链表
    邻接表建立图
    深度优先搜索树与广度优先搜索树
    tensorflow-笔记02
    深度学习-框架介绍
  • 原文地址:https://www.cnblogs.com/erchun/p/14088966.html
Copyright © 2011-2022 走看看