1.有关__new__方法的介绍
__new__方法调用在构造方法构造实例之前,即在__init__方法执行之前,我们可以这样理解,他的作用是决定是否适用这个__iint__方法来构造实例,但是需要注意,__new__只出现在新式类中,在经典类中没有这个方法.本质上__new__是一个静态方法.
2.有关__new__的使用
上面我们介绍__new__方法,下面我们来看一下他是如何使用的
class User(object): def __init__(self,name): self.name = name print("__init__方法被调用") @staticmethod def __new__(cls, *args, **kwargs): print("__new__方法被调用") return object.__new__(cls) if __name__ == '__main__': u1 = User("name")
上面代码的执行结果如下:
通过上面的结果我们可以知道,__new__方法执行在__init__方法之前
我们在来解释下他的用法:
1)__new__方法必须有参数cls,cls指的是当前正在实例化的类
2)__new__必须有返回值,返回的是实例,如果是使用当前类构造的实例,可以用object.__new__(cls),也可以用父类名.__new__(cls)
3)__init__方法的参数self其实就是__new__方法返回的实例对象,在这个__init__方法中还可以对这个实例进行其他的操作,比如添加一些属性等
注:实际上在新式类中我们不是必须要重写这个__new__方法,python是默认调用这个类的直接父类的__new__方法来构造实例的
通常这个__new__方法用在单例模式的实现上