python 内建函数__new__的单例模式

今天好奇__init__和__new__的区别是什么?

我了解到:

  __init__:只是单纯的返回一个类对象的实例,是在__new__之后调用的

  __new__:创建一个类对象实例,

class Singleton(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            orig = super(Singleton,cls)
            cls._instance = orig.__new__(cls, *args, **kwargs)
        return cls._instance
    
class myClass(Singleton):
    a=1
    
one = myClass()
two = myClass()
two.a=3

运行结果如下:

pydev debugger: starting (pid: 13388)
3
True

可以看出使用__new__创建的对象是同一个对象,是单例。如否要验证__init__和__new__的调用顺序,可以定义一个__init__然后简答的输出一串字符串,看看那个函数的字符串先出输出就是先调用了那个

posted @ 2018-06-12 15:26  first_semon  阅读(156)  评论(0编辑  收藏  举报