""" 元 - meta 元数据 - 描述数据的数据 - metadata 元类 - 描述类的类 - metaclass - 继承自type """ import threading class SingletonMeta(type): """自定义元类""" def __init__(cls, *args, **kwargs): cls.__instance = None cls.lock = threading.Lock() super().__init__(*args, **kwargs) def __call__(cls, *args, **kwargs): if cls.__instance is None: with cls.lock: if cls.__instance is None: cls.__instance = super().__call__(*args, **kwargs) return cls.__instance class President(metaclass=SingletonMeta): """总统(单例类)""" def __init__(self, name, country): self.name = name self.country = country def __str__(self): return f'{self.country}: {self.name}' def main(): """主函数""" p1 = President('特朗普', '美国') p2 = President('奥巴马', '美国') p3 = President.__call__('克林顿', '美国') print(p1 == p2) print(p1 == p3) print(p1, p2, p3, sep='\n') if __name__ == '__main__': main()