美文网首页
python单例模式

python单例模式

作者: cabbywang | 来源:发表于2018-06-14 01:13 被阅读0次

python单例模式实现方式

使用模板

python模块是天然的单例模式(.pyc文件的存在)

# singleton.py
class A(object):
    def foo(self):
        pass
a = A()
from singleton import a
a.foo()

使用__new__

__new__是用来创建实例的, 控制其创建过程, 只创建一次实例

class Singleton(object):
    _instance = None
    def __new__(cls, *args, **kwargs):
        if cls._instance:
            return cls._instance
        return super(Singleton, cls).__new__(cls, *args, **kwargs)

class A(Singleton):
    pass

one = A()
two = A()
one is two
# Ture

使用装饰器 (decorator)

原理和使用__new__相同

from functools import wraps
def singleton(cls):
    instances = {}
    @wraps(cls)
    def getinstance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return getinstance

@singleton
class A(object):
    pass

one = A()
two = A()
one is two
# Ture

使用元类 (metaclass)

class Singleton(type):
    _instances = {}
    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
        return cls._instances[cls]

# __metaclass__ = Singleton

# class A(object):
#   pass

class A(metaclass=Singleton):
    pass

one = A()
two = A()
one is two
# True

注释部分没有成功, 可能我现在对metaclass的认知还不够, 之后再做更新。。。

总结:python模块的天然单例模式一般情况下够用了, 装饰器感觉也比较好用。

相关文章

  • python之理解单例模式

    python之理解单例模式 1、单例模式 单例模式(Singleton Pattern)是一种常见的软件设计模式,...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 2018-06-19 Python中的单例模式的几种实现方式的及

    转载自: Python中的单例模式的几种实现方式的及优化 单例模式 单例模式(Singleton Pattern)...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • 基础-单例模式

    单例模式总结-Python实现 面试里每次问设计模式,必问单例模式 来自《Python设计模式》(第2版) 1.理...

  • python单例模式

    python单例模式实现方式 使用模板 python模块是天然的单例模式(.pyc文件的存在) 使用__new__...

  • 一套完整Python经典面试题,实力派,做内容不做标题党!

    文末含Python学习资料 1:Python如何实现单例模式? Python有两种方式可以实现单例模式,下面两个例...

  • Python 面向对象7: 单例模式

    一、内容 1.1、单例设计模式 1.2、__new__方法 1.3、Python 中的单例 二、单例设计模式 2....

  • Python设计模式 之 Borg模式

    Borg模式 是单例模式在python中的变种。传统单例模式在python中,存在继承兄弟类之间状态隔离的问题。 ...

网友评论

      本文标题:python单例模式

      本文链接:https://www.haomeiwen.com/subject/gbceeftx.html