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. 单例模式一般分为懒汉式和饿汉式 懒汉式内存占用更加合理
  • 相关阅读:
    JAVA 作业:图形界面
    操作系统实验3:内存分配与回收
    PLAN :昔日未来
    操作系统课程:调度算法
    KMP 代码 暂存
    笔试总结篇(一) : 广州X公司笔试
    雨夜静思(一)
    KMP算法详解-- 转自Matrix67
    百度笔试
    lucene中Document删除不了的问题
  • 原文地址:https://www.cnblogs.com/wenm1128/p/11750664.html
Copyright © 2011-2022 走看看