Python 单例模式

Posted 没有最晚的时刻,当你发现时

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 单例模式相关的知识,希望对你有一定的参考价值。

1,单例模式的定义

  单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。

2,单例模式的应用场景

  • 需要频繁的进行创建和销毁的对象;
  • 创建对象时耗时过多或耗费资源过多,但又经常用到的对象;
  • 工具类对象;
  • 频繁访问数据库或文件的对象。

3,单例模式模式实现方式

  1. 利用__new__方法

# 第一种 __new__
class Singleton(object):
    _instance = None

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = object.__new__(cls)

            return cls._instance
        else:
            return cls._instance


class MyClass(Singleton):
    a = 1


a = MyClass()
b = MyClass()
print(a.a)
print(b.a)

  2,共享属性 :创建实例时把所有实例的__dict__指向同一个字典,这样它们具有相同的属性和方法.

class Singleton(object):
    _data = {}

    def __new__(cls, *args, **kwargs):
        ob = super(Singleton, cls).__new__(cls, *args, **kwargs)
        ob.__dict__ = cls._data
        return ob


class MyClass2(Singleton):
    b = 3


b = MyClass2()
print(b.b)

  3, 装饰器版本

技术图片
def singleton(cls):
    instances = {}

    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]

    return get_instance


@singleton
class MyClass(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age


c = MyClass("yu", 33)
d = MyClass(ad, 88)
print(c, d)
View Code

  4, import 方法  作为python的模块是天然的单例模式

 

以上是关于Python 单例模式的主要内容,如果未能解决你的问题,请参考以下文章

Python 单例设计模式

Python单例

一日一技:Python 下面最简单的单例模式写法

Python面向对象之单例模式

常用代码片段

常用代码片段