擅长:python、mysql、java
<p>下面是一个稍微简单一点的写单子的方法:</p>
<pre><code>class Singleton(object):
__instance = None
def __new__(cls):
if cls.__instance is None:
cls.__instance = super(Singleton,cls).__new__(cls)
cls.__instance.__initialized = False
return cls.__instance
def __init__(self):
if(self.__initialized): return
self.__initialized = True
print ("INIT")
a = Singleton()
b = Singleton()
print (a is b)
</code></pre>
<p>尽管有更好的方法。我不得不承认我从来都不喜欢单身汉。我更喜欢工厂式的方法:</p>
<pre><code>class Foo(object):
pass
def foo_singleton_factory(_singlton = Foo()):
return _singleton
a = foo_singleton_factory()
b = foo_singleton_factory()
print (a is b)
</code></pre>
<p>这样做的好处是,如果你想要的话,你可以一直获得相同的Foo实例,但是如果你决定在未来10年内不想要真正的单实例,你就不局限于一个实例。</p>