python单例类装饰器

Ale*_*ope 2 python singleton decorator

我在这里遇到了这个单例实现:http://blog.amir.rachum.com/post/21850841339/implementing-the-singleton-pattern-in-python在第一个回复中.

def singleton(cls):
    return cls()

@singleton
class Foo(object):
    def bar(self):
        pass

if __name__ == '__main__':

    print id(Foo)
    print id(Foo) 
Run Code Online (Sandbox Code Playgroud)

但我不了解内部工作原理,装饰器返回一个类实例,但为什么每次都是同一个实例?

fil*_*mor 6

您可以将该代码重写为

class Foo(object):
    pass

Foo = singleton(Foo)
# which is
Foo = Foo()
Run Code Online (Sandbox Code Playgroud)

所以这里的类的名称被它的实例化取代.在我看来有点俗气,特别是因为你仍然可以通过使用创建同一类的新对象,Foo.__class__并且你正在弄乱命名模式.