この回答では、シングルトンデコレータがそのように示されています
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()
呼び出されるか
これが機能しないことは理解していると思いますが(インスタンスへの割り当てはローカルであり、呼び出し間で失われるため)、なぜこのエラーが発生するのかわかりません。