• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python实现单例模式的5种方法

    基本介绍

    一个对象只允许被一次创建,一个类只能创建一个对象,并且提供一个全局访问点。

    单例模式应该是应用最广泛,实现最简单的一种创建型模式。

    特点:全局唯一,允许更改

    优缺点

    优点:

    缺点:

    Python实现

    方式1,元类实现:

    class MetaClass(type):
        def __call__(self, *args, **kwargs):
            """
            self : class Singleton
            """
            if not hasattr(self, "ins"):
                insObject = super(__class__, self).__call__(*args, **kwargs)
                setattr(self, "ins", insObject)
            return getattr(self, "ins")
    
    
    class Singleton(object, metaclass=MetaClass):
        pass
    
    
    if __name__ == "__main__":
        ins = Singleton()
        print(id(ins))
        ins = Singleton()
        print(id(ins))
    
    

    方式2,继承实现:

    class ParentClass:
        def __new__(cls, *args, **kwargs) -> object:
            """
            cls : class Singeton
            """
            if not hasattr(cls, "ins"):
                insObject = super(__class__, cls).__new__(cls, *args, **kwargs)
                setattr(cls, "ins", insObject)
            return getattr(cls, "ins")
    
    
    class Singleton(ParentClass):
        pass
    
    
    if __name__ == "__main__":
        ins = Singleton()
        print(id(ins))
        ins = Singleton()
        print(id(ins))

    方式3,装饰器实现:

    def warpper(clsObject):
        def inner(*args, **kwargs):
            if not hasattr(clsObject, "ins"):
                insObject = clsObject(*args, **kwargs)
                setattr(clsObject, "ins", insObject)
            return getattr(clsObject, "ins")
        return inner
    
    
    @warpper
    class Singleton:
        pass
    
    
    if __name__ == "__main__":
        ins = Singleton()
        print(id(ins))
        ins = Singleton()
        print(id(ins))
    
    

    方式4,模块实现:

    - foo.py --> ins = Singleton()
    - bar.py --> from foo import ins
    

    方式5,@classmethod实现单例模式:

    class Singleton:
    
        @classmethod
        def getSingletonInstanceObject(cls, *args, **kwargs):
            if not hasattr(cls, "ins"):
                insObject = cls(*args, **kwargs)
                setattr(cls, "ins", insObject)
            return getattr(cls, "ins")
    
    
    if __name__ == "__main__":
        ins = Singleton.getSingletonInstanceObject()
        print(id(ins))
        ins = Singleton.getSingletonInstanceObject()
        print(id(ins))
    
    

    到此这篇关于Python实现单例模式的5种方法的文章就介绍到这了,更多相关Python 单例模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • python 6种方法实现单例模式
    • python 实现单例模式的5种方法
    • python单例模式的多种实现方法
    • 详解python实现线程安全的单例模式
    • 基于Python中单例模式的几种实现方式及优化详解
    • Python单例模式的两种实现方法
    • 5种Python单例模式的实现方式
    • 常见的在Python中实现单例模式的三种方法
    上一篇:Python实现最短路径问题的方法
    下一篇:Python数据结构之图的存储结构详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Python实现单例模式的5种方法 Python,实现,单例,模式,的,