单例模式
(1)不用装饰器实现
class MyClass2(object):
__instance = None
def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance
t1 = MyClass2()
t2 = MyClass2()
print(id(t1), id(t2))
(2)用装饰器实现
def decorate(func):
instance = {}
def fun(*args, **kwargs):
if func not in instance:
instance[func] = func(*args, **kwargs)
return instance[func]
return fun
@decorate
class MyClass3(object):
def __init__(self, name):
self.name = name
m1 = MyClass3("aa")
m2 = MyClass3("bb")
print(id(m1), id(m2))
print(m1.name)