今天好奇__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__然后简答的输出一串字符串,看看那个函数的字符串先出输出就是先调用了那个