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)
但我不了解内部工作原理,装饰器返回一个类实例,但为什么每次都是同一个实例?
您可以将该代码重写为
class Foo(object):
pass
Foo = singleton(Foo)
# which is
Foo = Foo()
Run Code Online (Sandbox Code Playgroud)
所以这里的类的名称被它的实例化取代.在我看来有点俗气,特别是因为你仍然可以通过使用创建同一类的新对象,Foo.__class__并且你正在弄乱命名模式.