zoukankan      html  css  js  c++  java
  • 单例模式-python

    单例模式

    什么是单例

    当实例化多次得到的对象中存放的属性都一样的情况,应该将多个对象指向同一个内存,即同一个实例

    有什么优点

    在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。

    避免对资源的多重占用(比如写文件操作)。

    python单例模式的4种实现

    模块

    利用了模块的特性,只执行一次

    bl.py

    class zx():
        pass
    z=zx()
    
    import dl
    dl.z
    print(dl.z)
    import dl
    dl.z
    print(dl.z)
    
    <dl.zx object at 0x000002517F5CDD30>
    <dl.zx object at 0x000002517F5CDD30>
    

    装饰器

    def outter(cls):
        zx=cls()
        def inner():
            return zx
        return inner
    
    @outter          #wl=outter(wl)
    class wl():
        pass
    
    z1=wl()
    z2=wl()
    
    print(z1)
    print(z2)
    
    <__main__.wl object at 0x000002155202BDD8>
    <__main__.wl object at 0x000002155202BDD8>
    

    类属性

    class haha():
        pass
    
    class zx():
        obj=None
        def set_obj(self):
            zx.obj=haha()
    
        def get_obj(self):
            return self.obj
    
    zx1=zx()
    zx1.set_obj()
    z1=zx()
    z2=zx()
    print(z1.get_obj())
    print(z2.get_obj())
    
    <__main__.haha object at 0x000001D78238DDA0>
    <__main__.haha object at 0x000001D78238DDA0>
    

    元类

    class haha():
        pass
    
    class Mytype(type):
    
        def __init__(self, *args, **kwargs):
            self.haha=haha()
    
    class zx(metaclass=Mytype):
        pass
    
    print(zx.__dict__)
    z1=zx()
    z2=zx()
    
    print(z1.haha)
    print(z2.haha)
    
    {'__module__': '__main__', '__dict__': <attribute '__dict__' of 'zx' objects>, '__weakref__': <attribute '__weakref__' of 'zx' objects>, '__doc__': None, 'haha': <__main__.haha object at 0x000002817458DD30>}
    <__main__.haha object at 0x000002817458DD30>
    <__main__.haha object at 0x000002817458DD30>
    
  • 相关阅读:
    如何为基于windows验证的站点的某个页面、文件或文件夹单独设置匿名访问
    JMeter基础
    selenium select操作及其他补充
    HTML面试
    第一天
    AspNetPager 7.4.2版发布
    java移位运算copy来的。为了备忘
    android 开发中的错误
    启动android模拟器报错
    最省内存的方式加载图片资源
  • 原文地址:https://www.cnblogs.com/zx125/p/11466018.html
Copyright © 2011-2022 走看看