<p>事实上,只要稍加调整,你就能做到</p>
<pre><code># python object singleton
class Observer():
pass
observe = Observer()
class singleton():
def __init__(self,):
if observe.__dict__.has_key(self.__class__.__name__):
raise Exception, 'Only one instance of the same "%s" class is allowed' % self.__class__.__name__
observe.__dict__[self.__class__.__name__]=True
def some_method(self,):
# roll your own code
pass
one = singleton()
two = singleton() # will raise an error
</code></pre>
<p>observer类是存储状态的地方,singleton类是请求中的类,您只想将其限制为一个实例,您可以创建许多类,如<code>singleton</code>,但只有一个<code>Observer</code>来保持所有类的状态。你知道吗</p>
<p>试试上面的代码,玩得开心。。它对我有用:))</p>
<hr/>
<p><strong>更新创建singleton而不引发异常</strong></p>
<pre><code>class Observer():
def __init__(self,):
self.error = None
def __setattr__(self,class_name,instance):
if not self.__dict__.has_key(instance.__class__.__name__):
self.__dict__[class_name]=instance
else:
self.error = 'You are only allowed to creat intance once'
def __getattr__(self,class_name):
if self.__dict__.has_key(class_name):
return self.__dict__[class_name]
else:
return None
</code></pre>
<p>这是要实例化为singleton的类</p>
<pre><code>class test():
pass
</code></pre>
<p>用法</p>
<pre><code>observe = Observer()
observe.test = test() # This will be created and bound to the variable
observe.test = test() # This will not be created nor bound, but will generate an error msg in observe.error
if not observe.error:
print 'created successfully'
else:
print 'Encountered a problem: %s, only this instance has been created: %s' % (observe.error,observe.test)
</code></pre>