python中实现单例模式
python中实现单例模式的方式大致有四种:
1.模块
2.改写类的new方法,控制实例生成
3.装饰器
4.元类
1.模块
python中的模块是天然的单例模式,并且是线程安全的,所有的模块只会在运行时加载一次。
所以,利用模块就可以实现一个线程安全的单例。如:
1 | # my singleton.py |
- new方法
python中每个类在实例化对象时,首先会调用new方法创建一个实例,然后再调用init方法动态绑定其他属性.如:1
2
3
4
5
6
7
8class Singleton(object):
_instance = None
def __new__(cls, *args, **kw):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)
return cls._instance
class MyClass(Singleton):
a = 1
3.装饰器
装饰器可以动态的修改一个类或方法的表现,利用装饰器生成单例
1 | from functools import wraps |
4.元类
元类可以控制其子类的类对象(new)及类实例对象(call)的创建。
1 | class Singleton(type): |
最著名的就是Django中的ORM,其model中就使用了元类来控制所有model的表现
关于头图
摄于内蒙古乌兰布统草原