Singleton的Python实现

时间:2011-09-19 23:50:44

标签: python singleton decorator

代码优先:

def singleton(cls):
    instances = {}
    def get_instance():
        if cls not in instances:
            instances[cls] = cls()
        return instances[cls]
    return get_instance

@singleton
class A:
    #...

好的,上面的代码是Singleton的一个实现,我看到了this implementation in another post

我不明白为什么单例函数返回一个函数但A是一个类。 它是如何工作的?

2 个答案:

答案 0 :(得分:1)

当你在装饰后调用MyClass()时,你是对的 - 你实际上并没有调用一个类,你正在调用一个函数。

该函数调用类if cls not in instances并缓存它,然后返回缓存的实例。

换句话说,没有理由MyClass()必须直接调用该类 - 只要它返回一个类的实例,它就会按预期工作。

答案 1 :(得分:1)

A最终不是一个类。 A类被创建,但随后被singleton返回的函数替换。所以最后,A最终成为一个功能。

但是,既然你调用一个类来创建一个对象,它最终会以相同的方式工作。但isinstance不起作用。

P.S。你可能不应该使用单身人士。在python中,它几乎总是错误的选择。