关于python 单例模式和Borg

By admin at 2013-11-23 21:33:56 • 1686次点击

Singleton 模式,中文既为 单实例模式 。

Python真的需要单例模式吗?我指像其他编程语言中的单例模式。答案是:不需要!
因为,Python有模块(module),最pythonic的单例典范。
模块在在一个应用程序中只有一份,它本身就是单例的,将你所需要的属性和方法,直接暴露在模块中变成模块的全局变量和方法即可!

如果你真的想要用python 实现单例模式,下面的代码可参考:

class Borg:
    __shared_state = {}
    def __init__(self):
        self.__dict__ = self.__shared_state

上面是简洁的,下面是形象的

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


if __name__ == '__main__':
    s1=Singleton()
    s2=Singleton()
    if(id(s1)==id(s2)):
        print "Same"
    else:
        print "Different"

原文参考 http://stackoverflow.com/a/31887/1447185 5

python, 模式, borg


登录 后发表评论