我在这里遇到了这个单例实现: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)
但是我不明白内部的工作原理,decorator返回一个类实例,但是为什么每次都是相同的实例呢?在
单粒子通过保持内部状态来实现这一点。这里的状态可能是类的一个实例。装饰师可以是任意的。在
看看这个:
http://hairysun.com/downloads/DecoratorHandout.pdf
decorator本质上是一个函数
周围的类(这里是decorator)可以这样做:
^{pr2}$我没有运行代码,但我假设这是一般的工作方式。如果没有可用实例,请创建一个实例。如果有一个可用的,不要创建一个新的,而是返回一个旧的。在生产中使用此属性之前,可能需要检查可调用的其他属性。在
你可以把代码重写成
所以在这里,类的名称被它的实例化所代替。在我看来,这有点俗气,特别是因为您仍然可以通过使用
Foo.__class__
来创建同一类的新对象,而且您在搞乱命名模式。在相关问题 更多 >
编程相关推荐