类每次实例化的时候都会创建一个对象,如果要类每次实例化的时候只创建一个对象,那么就可以用单例模式
class MyClass(object): instance = None def __new__(cls, *args, **kwargs): if not cls.instance: cls.instance = object.__new__(cls) return cls.instance else: return cls.instance myclass = MyClass() myclass.name = 'lalala' print(myclass.name) myclass2 = MyClass() # myclass2 没有name属性,但也能调用,因为这个类是单例模式 print(myclass2.name) 结果: lalala lalala
用装饰器实现单例模式
def single(cls): # 用装饰器实现的单例模式需要保证每一个类调用都能变成单例模式 # 因此创建一个字典来保存需要变成单例模式的那些类 instance = {} def fun(*args, **kwargs): # cls即传入的方法,也就是传入的类;当类名不在字典里的时候,说明没有实例化,那就帮它实例化一次 if cls not in instance: instance[cls] = cls(*args, **kwargs) return instance[cls] else: return instance[cls] return fun @single class Test: pass t = Test()