Python中的__new__()函数

230 阅读1分钟

__new__()函数是Python中的内置静态函数,无需 @staticmethod装饰器进行显性修饰。在Python中,使用双下划线声明的成员函数__xxx__()为魔法函数,例如__init__(),__new__(),__iter__()等。这些魔法函数不需要直接去调用,Python解释器会根据情况默认调用,魔法函数可以被重载,因此可根据需求重载相应的魔法函数,如下重载了魔法函数__str__(),在使用print函数时会调用__str__()函数。

image.png

__new__()函数是在实例化对象时第一个被调用的函数,优先于__init__()函数之前执行。__new__()可以认为是生成一个实例化对象,__init__()函数则对实例化对象进行加工。__new__()函数的参数必须要有clc,代表着要实例化的类,这是约定俗成的写法,类似于self,返回值通常为该类的一个实例,但也可以返回其他类的实例。

image.png

一般情况下使用__init__()函数更多一些,__new__()函数的使用场景通常是设置单例模式(类有且只有一个实例化对象),或者继承不可变数据的类型时需要用到__new__方法(例如int, str, 或者tuple),或者构造继承自type类的元类时,需要用到__new__()方法去定义元类的构造。