您的位置:首页 > 编程语言 > Python开发

python使用__new__来实现singleton单例模型

2014-02-18 00:00 609 查看
摘要: 实现singleton单例模型

在软件设计过程中,根据需求需要实现singleton单例模型。比如创建数据库的连接实例。下面利用python新式类里的__new__的静态方法来实现。

__new__原型为object.__new__(cls,[...]),cls是一个类对象。当你调用C(*arg, **kargs)来创建一个类C的实例时。python内部调用是C.__new__(C, *arg, **kargs),然后返回值是类C的实例c。在确认c是C的实例后,python再调用C.__init__(c, *arg, **kargs)来实例化c。

所以调用一个实例c=C(2),实际执行的代码为:

c = C.__new__(C, 2)
if isinstance(c, C):
C.__init__(c, 2)


object.__new__创建一个新的,没有经过初始化的实例。当你重写__new__方法时,可以不用使用修饰器@staticmethod指明它是静态函数。解释器会自动判断这个方法为静态方法。如果需要重新绑定C.__new__方法时,只要在类的外面执行C.__new__=staticmethod(youfunc)就可以了。

下面使用__new__来实现Singleton单例模型。

class Singleton(object):
_singleton = {}

def __new__(cls):
if not cls._singleton.has_key(cls):
cls._singleton[cls] = object.__new__(cls)
return cls._singleton[cls]




可以看出两个实例是指向同一个内存地址。Singleton所有子类也有这一个特性。只有一个实例对象。如果它的子类定义了__init__方法,那么必须保证它的__init__ 方法能够安全的同一个实例进行多次调用。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: