Python new方法

Python new方法教程

Python 中的 __new__() 方法是一种负责创建 类实例静态方法,且该方法会在 init() 初始化方法之前被调用。一般情况下,我们在覆写 __new__() 的实现之前,都会先使用 super 调用父类的 new 方法。

Python new方法详解

语法

def new(cls, *args, **kwargs):

说明

new 方法可以有多个位置参数和多个命名参数。

Python new方法作用

Python 中的 __new__() 方法是在新式类中新出现的方法,Python 中的构造方法 __init__() 负责将类实例化,而在 __init__() 执行之前,__new__() 负责制造这样的一个实例对象,以便 __init__() 去让该实例对象更加的丰富(为其添加属性等)。

同时,__new__() 方法还决定是否要使用该 __init__() 方法,因为 __new__() 可以调用其他类的构造方法或者直接返回别的对象来作为本类的实例。

案例

new方法会在init方法之前被调用

Python 中的 new 方法会在 init 方法之前被调用

print("嗨客网(www.haicoder.net)") class Person(object): def __new__(cls,*args,**kwargs): print("call __new__()") instance = super().__new__(cls) return instance def __init__(self): print("call __init__()") p = Person()

程序运行后,控制台输出如下:

110_python new方法.png

我们创建了一个 Person 类,Person 类继承自 object 类,接着,我们 重写__new__ 方法和 __init__ 方法。

最后,我们实例化了 Person 类,我们发现,__new__ 方法会在 __init__ 方法之前被调用。

使用new方法创建其他类实例

使用new方法可以创建其他类实例

print("嗨客网(www.haicoder.net)") class Person(object): def __new__(cls, *args, **kwargs): print("call Person __new__()") instance = super().__new__(cls) return instance class Student(object): def __new__(cls, *args, **kwargs): print("call Student __new__()") instance = object.__new__(Person, *args, **kwargs) return instance stu = Student() print("Type stu =", type(stu))

程序运行后,控制台输出如下:

111_python new方法.png

我们创建了一个 Person 类和一个 Student 类,并且都重写了它们的 __new__ 方法,在 Student 类的 __new__ 方法里,我们调用的 __new__ 的第一个参数传递的是 Person 类。

因此,我们在实例化 Student 类实例时,其实创建的是 Person 类的实例,而不是 Student 类的实例。

Python new方法总结

Python 中的 __new__() 方法是一种负责创建类实例的静态方法,且该方法会在 init() 初始化方法之前被调用。一般情况下,我们在覆写 __new__() 的实现之前,都会先使用 super 调用父类的 new 方法。

Python 中的 __new__() 方法是在新式类中新出现的方法,Python 中的构造方法 __init__() 负责将类实例化,而在 __init__() 执行之前,__new__() 负责制造这样的一个实例对象,以便 __init__() 去让该实例对象更加的丰富(为其添加属性等)。

同时,__new__() 方法还决定是否要使用该 __init__() 方法,因为 __new__() 可以调用其他类的构造方法或者直接返回别的对象来作为本类的实例。