单例模式

(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)
posted @ 2022-04-22 18:47  狒狒桑  阅读(15)  评论(0编辑  收藏  举报