# 装饰器实现单例模式
def singleton(cls, *args, **kwargs):
instances = {}
def get_instance(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return get_instance
@singleton
class Student(object):
def __init__(self, name, age):
self.name = name
self.age = age
def run(self):
print(self.name)
if __name__ == '__main__':
student = Student('wang', 18)
student.run()
hshs = Student('kai', 21)
hshs.run()
执行结果:
wang
wang
1、单例模式:
即一个类有且只能有一个实例,有且只能实现一个实例,有时是为了控制实例个数,有时是为了节约系统资源。
2、用装饰器使用单例模式的原理
student = Student('wang', 18) 即相当于直接把 Student('wang', 18) 作用 singleton的第一个参数传入方法中,此时instance 为空,当这个类第一次实例化之后 instalce = {<class '__main__.Student'>:<__main__.Student object at 0x0000026CFBA5CF60>}