zoukankan      html  css  js  c++  java
  • 关于单例模式


    #------------------------------------------------  ----------------------------------------------------
    """
    代码解释: class Singleton2中的__init__MyClass2声明的时候被执行,MyClass2=Singleton2()
             MyClass2(),最先执行父类的__call__方法(object,Singleton2都作为MyClass2的父类,根据深度优先算法,会执行Singleton2中的__call__)
             Singleton2中的__call__ 中书写了单例的逻辑.
    """

    # class Singleton2(type):
    #     def __init__(self, name, bases, dict):
    #         print(self)
    #         print("sssss")
    #         super(Singleton2, self).__init__(name, bases, dict)
    #         self._instance = None
    #     def __call__(self, *args, **kwargs):
    #         print(self)
    #         if self._instance is None:
    #             self._instance = super(Singleton2, self).__call__(*args, **kwargs)
    #         return self._instance
    #
    #
    # class MyClass2(object,metaclass=Singleton2):
    #     a = 1
    #
    # one = MyClass2()
    # two = MyClass2()
    #
    # print (id(one)) # 31495472
    #
    # print (id(two)) # 31495472
    #
    # print (one == two) # True
    #
    # print (one is two) # True


    #------------------------------------------------  ----------------------------------------------------
    # class Singleton(object):
    #     def __new__(cls, *args, **kwargs):
    #         if not hasattr(cls, '_instance'):
    #             cls._instance = super().__new__(cls, *args, **kwargs)
    #         return cls._instance
    #
    #
    # class MyClass(Singleton):
    #     a = 1
    #
    #
    # one = MyClass()
    # two = MyClass()
    #
    # # onetwo完全相同,可以用id(), ==, is检测
    # print (id(one))
    #   # 29097904
    # print (id(two))
    #   # 29097904
    # print (one == two)
    #   # True
    # print (one is two )
    # True

    #------------------------------------------------  ----------------------------------------------------
    # def singleton(cls):
    #     instances = {}
    #
    #     def _singleton(*args, **kwargs):
    #         if cls not in instances:
    #             instances[cls] = cls(*args, **kwargs)
    #         return instances[cls]
    #
    #     return _singleton
    #
    #
    # @singleton # MyClass3 = singleton(MyClass3)
    # class MyClass3(object):
    #     a = 1
    #     def __init__(self,*args, **kwargs):
    #         pass
    #
    # one = MyClass3(3,4,5) # MyClass3:<function singleton.<locals>._singleton at 0x000000170E460D08>
    # two = MyClass3(6,7,i=9)
    #
    # print (id(one))
    #   # 29660784
    # print (id(two))
    #   # 29660784
    # print (one == two)
    #   # True
    # print (one is two)
      # True
    #------------------------------------------------ (自己练习) ----------------------------------------------------
    def singleton(cls):
        instances={}
        def _singleton(*args,**kwargs):
            if cls not in instances:
                instances[cls]=cls(*args,**kwargs)
            return instances[cls]
        return _singleton

    @singleton
    class MyClass(object):
        a = 1
        def __init__(self,*args,**kwargs):
            pass

    a = MyClass(1,2)
    b = MyClass(2,4,i=5)
    print(id(a))
    print(id(b))

    #------------------------------------------------ ,基于文件实现 ----------------------------------------------------
    class XXX(object):
        pass

    xx = XXX()  #---->这样别的地方从本模块直接导入xx,他们的id都是一样
     
     
     
     
  • 相关阅读:
    2020.10.25【NOIP提高A组】模拟 总结
    6831. 2020.10.24【NOIP提高A组】T1.lover
    枚举一个数$n$的所有质因子
    gmoj 6832. 2020.10.24【NOIP提高A组】T2.world
    2020.10.24【NOIP提高A组】模拟 总结
    2020.10.17【NOIP提高A组】模拟 总结
    jQuery EasyUI Portal 保存拖动位置,仿谷歌DashBoard效果的
    SQLMAP注入教程-11种常见SQLMAP使用方法详解
    Windows下sqlmap的安装图解
    swap file "*.swp" already exists!的解决方法
  • 原文地址:https://www.cnblogs.com/jec1999/p/7717777.html
Copyright © 2011-2022 走看看