zoukankan      html  css  js  c++  java
  • python学习笔记之---单例

    #单例:一个类只能生成一个实例
    单例的本质:一个类最多生成一个实例
    __new__:
    1 真正生成实例的方法
    2 在这个方法里,要判断是否存在_instance的类变量
    如果已经存在了,直接返回
    不在呢?那么我给_instance赋值一个新生成的实例对象。
    class Singleton(object):
        def __new__(cls, *args, **kw):
            if not hasattr(cls, '_instance'):
                print(cls)
                #orig = super(Singleton, cls)
                cls._instance = object.__new__(cls, *args, **kw)
            return cls._instance
     
    s1=Singleton()#第一次生成实例,走if语句成立,调用__new__生成一个实例,后返回
    s2=Singleton()#第二次生成实例,if语句不成立不会再走下面的的语句,直接返回cls._instance(第一次生成的实例),以此来实现单例
    print(s1==s2)
    print(id(s1))
    print(id(s2))
    C:UsersdellDesktop练习6>py -3 0610.py
    <class '__main__.Singleton'>
    True
    1526180159560
    1526180159560
     
    #继承之后实现单例
    class Singleton(object):
        def __new__(cls, *args, **kw):
            if not hasattr(cls, '_instance'):
                print(cls)
                #orig = super(Singleton, cls)
                cls._instance = object.__new__(cls, *args, **kw)
            return cls._instance
     
    class MyClass(Singleton):pass
     
    s1=MyClass()
    s2=MyClass()
     
     
    print(s1==s2)
    print(id(s1))
    print(id(s2))
    C:UsersdellDesktop练习6>py -3 0610.py
    <class '__main__.MyClass'>
    True
    1734367708776
    1734367708776
     
     
    #另一种方式实现单例,导入法:
    a.py
    class My_Singleton(object):
        def foo(self):
            pass
    my_singleton = My_Singleton()
    bb.py
    import a
     
    print(id(a.my_singleton))
    print(id(a.my_singleton))
    print(id(a.my_singleton))
    C:UsersdellDesktop练习6>py -3 bb.py
    1827500073704
    1827500073704
    1827500073704
     
     
    1. 单例模式 --> 单一(唯一)的实例. 在整个运行时间内, 内存中只有一个对象, 一般该对象涉及网络,资源等操作.
    2. 单例模式一般分为懒汉式和饿汉式 懒汉式内存占用更加合理
  • 相关阅读:
    backup archivelog delete input 与delete all input 区别
    RMAN LIST
    RMAN '异机异目录恢复'
    linux系统日志解析
    rman备份丢失控制文件,利用dbms_backup_restore恢复
    同义词的妙用
    上季度的老毛病又来了
    ORA20446,再次遭遇oracle bug
    修改RAC VIP IP
    数据库慢,原来与数据库无关
  • 原文地址:https://www.cnblogs.com/wenm1128/p/11750664.html
Copyright © 2011-2022 走看看