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()
  • 相关阅读:
    bzoj3473 字符串
    洛谷P4070 生成魔咒
    洛谷P3975 弦论
    AT1219 歴史の研究
    课上讲的几个新的技巧
    索引与视图(转载)
    oracle中的分支与循环语句
    Oracle to_date()函数的用法《转载》
    自定义函数的存储过程的区别
    UNION 和 UNION ALL 操作符
  • 原文地址:https://www.cnblogs.com/erchun/p/14088966.html
Copyright © 2011-2022 走看看