example07.py 731 B

1234567891011121314151617181920212223242526272829303132333435
  1. """
  2. 元类 - 设计模式 - 单例模式(让一个类只能创建唯一的实例)
  3. """
  4. class SingletonMeta(type):
  5. """单例类的元类(描述其他类的类)"""
  6. def __init__(cls, *args, **kwargs):
  7. cls.__instance = None
  8. def __call__(cls, *args, **kwargs):
  9. if cls.__instance is None:
  10. cls.__instance = super().__call__(*args, **kwargs)
  11. return cls.__instance
  12. class President(metaclass=SingletonMeta):
  13. """总统(单例类)"""
  14. def __init__(self, name):
  15. self.name = name
  16. def main():
  17. p1 = President("王大锤")
  18. p2 = President("奥巴马")
  19. print(p1.name)
  20. print(p2.name)
  21. print(p1 == p2)
  22. print(p1 is p2)
  23. if __name__ == '__main__':
  24. main()