直接上代码:
class Singleton(object): def __new__(self): if not hasattr(self, ‘instance‘): self.instance = super(Singleton, self).__new__(self) self.num = 1 return self.instance def add(self): self.num += 1 def hello(self): print(self.num) s1 = Singleton() s1.add() s1.hello() 2 s2 = Singleton() s2.hello() 2
这是《Python设计模式》第13页经过完善后的例子。
特别说明:
1、有网友说__new__是在__init__之前调用的实例化方法,参数必须使用cls,而不能使用self,经过试验,却可以使用self;
2、如果在__init__中初始化属性num,则不能实现单例模式,每次创建对象都会初始化num;