__new__方法实现
class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, "_instance"):
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
for i in range(6):
s = Singleton()
print(s)
===========================================输出================================
<__main__.Singleton object at 0x7f50d2ba8c18>
<__main__.Singleton object at 0x7f50d2ba8c18>
<__main__.Singleton object at 0x7f50d2ba8c18>
<__main__.Singleton object at 0x7f50d2ba8c18>
<__main__.Singleton object at 0x7f50d2ba8c18>
<__main__.Singleton object at 0x7f50d2ba8c18>
元类方式实现
class Singleton(type):
def __init__(self, *args, **kwargs):
self._instance = None
super(Single, self).__init__(*args, **kwargs)
def __call__(self, *args, **kwargs):
if self._instance is None:
self._instance = super(Single,self).__call__(*args, **kwargs)
return self._instance
class Foo(object):
__metaclass__ = Singleton
for i in range(6):
print(Foo())
===============================输出===================================
<__main__.Foo object at 0x7f6c57b88550>
<__main__.Foo object at 0x7f6c57b88550>
<__main__.Foo object at 0x7f6c57b88550>
<__main__.Foo object at 0x7f6c57b88550>
<__main__.Foo object at 0x7f6c57b88550>
<__main__.Foo object at 0x7f6c57b88550>