您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python实现单例模式的5种方法

51自学网 2021-10-30 22:29:04
  python
这篇教程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):    passif __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):    passif __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@warpperclass Singleton:    passif __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 单例模式内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


Python实现最短路径问题的方法
Python数据结构之图的存储结构详解
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。