擅长:python、mysql、java
<p>不是的。通常不推荐的是python中这样的模式:</p>
<pre><code>class Singleton(object):
_instance = None
def __init__(self, ...):
...
@classmethod
def instance(cls):
if cls._instance is None:
cls._instance = cls(...)
return cls._instance
</code></pre>
<p>使用类方法来获取实例而不是构造函数。Python的元编程允许更好的方法,例如<a href="https://en.wikipedia.org/w/index.php?title=Singleton_pattern&oldid=368154154#Python" rel="noreferrer">Wikipedia</a>上的方法:</p>
<pre><code>class Singleton(type):
def __init__(cls, name, bases, dict):
super(Singleton, cls).__init__(name, bases, dict)
cls.instance = None
def __call__(cls, *args, **kw):
if cls.instance is None:
cls.instance = super(Singleton, cls).__call__(*args, **kw)
return cls.instance
class MyClass(object):
__metaclass__ = Singleton
print MyClass()
print MyClass()
</code></pre>