SZ神庙

从此开始,遁入幻想

2018年4月27日

秘术记闻>

python单例模式

单例模式是常见的一种设计模式,它是针对类的一种描述,因此,我们可以使用python的decorator来实现通用的单例模式。

一.基本的单例模式

首先建立我们的decorator。我们需要为classType建立_instance和_lock成员:

然后为class建立getInstance函数:

然后在我们的decorator中,将getInstance函数添加到class上:

现在我们的代码长这样。这个decorator已经具备了基本功能:

使用方法如下:

二.可继承的单例模式

现在让我们为这个单例模式添加一些功能:我们让被这个单例类可以产生子类,且子类也是单例类,和父类共享同一个instance。为此,我们必须修改被修饰的单例类的__init__方法,在其中设置instance为自身:

SingletonExistedError为自定义的error类型:

现在我们需要把这个新的init函数添加到被修饰的单例类的__init__函数上。很自然的,我们又可以利用函数的decorator来办成这件事情,就像这样:

最后,在我们的singleton decorator上加上这句代码:

大功告成!附上完整代码: