python的单例模式
1.使用__new__
方法
实现__new__
方法 并在将一个类的实例绑定到类变量_instance上, 如果cls._instance为None说明该类还没有实例化过,实例化该类,并返回;如果cls._instance不为None,直接返回cls._instance 。
|
|
2.使用修饰符方法
使用装饰器(decorator), 这是一种更pythonic,更elegant的方法,单例类本身根本不知道自己是单例的,因为他本身(自己的代码)并不是单例的。
|
|
3.使用metaclass方法
Person=Singleton(),Person其实为元类Singleton创建的一个实例类。创建Person的实例person1时,Person(‘lucky’,23)=Singleton.__call__
(cls,args, *kwargs),这样就将Person的所有实例都指向了Person的属性_instance上,这种方法与使用__new__
方法其实是相同的。
|
|
4.共享属性
所谓单例就是所有引用(实例、对象)拥有相同的状态(属性)和行为(方法) 同一个类的所有实例天然拥有相同的行为(方法),只需要保证同一个类的所有实例具有相同的状态(属性)即可。所有实例共享属性的最简单最直接的方法就是__dict__
属性指向(引用)同一个字典(dict)。
创建实例时把所有实例的__dict__
指向同一个字典,这样它们具有相同的属性和方法。
|
|
5.import方法
作为python的模块是天然的单例模式
|
|