example08.py 835 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. """
  2. 设计模式 - 单例模式(让一个类只能创建唯一的实例)
  3. """
  4. from functools import wraps
  5. def singleton(cls):
  6. instances = {}
  7. @wraps(cls)
  8. def wrapper(*args, **kwargs):
  9. if cls not in instances:
  10. instances[cls] = cls(*args, **kwargs)
  11. return instances[cls]
  12. return wrapper
  13. @singleton
  14. class President():
  15. """总统(单例类)"""
  16. def __init__(self, name):
  17. self.name = name
  18. def main():
  19. p1 = President("王大锤")
  20. p2 = President("奥巴马")
  21. print(p1.name)
  22. print(p2.name)
  23. print(p1 == p2)
  24. print(p1 is p2)
  25. print('-' * 30)
  26. # 取消装饰器
  27. President2 = President.__wrapped__
  28. p2 = President2("奥巴马")
  29. print(p1.name)
  30. print(p2.name)
  31. print(p1 == p2)
  32. print(p1 is p2)
  33. if __name__ == '__main__':
  34. main()