1
In this answer一個單裝飾被示爲這樣蟒閉合局部變量
def singleton(cls):
instances = {}
def getinstance():
print len(instances)
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return getinstance
但instances
是「本地」的每個被裝飾類,所以我試圖更有效,並使用
def BAD_singleton(cls):
instances = None
def getinstance():
if instances is None:
instances = cls()
return instances
return getinstance
@BAD_singleton
class MyTest(object):
def __init__(self):
print 'test'
然而,這給出了一個錯誤
UnboundLocalError: local variable 'instances' referenced before assignment
當m = MyTest()
被稱爲
我想我明白這不應該工作(因爲實例的分配將是本地的,並會在調用之間丟失),但我不明白爲什麼我會收到此錯誤。
更完整['@ singleton'](http://wiki.python.org/moin/PythonDecoratorLibrary#Singleton)。 – ephemient
@ephemient謝謝。一般而言,這是一個非常有用的外觀頁面。 – tacaswell