Python 中的 _new_

2024 年 8 月 29 日 | 阅读 3 分钟

Python 支持对象的创建和操作,使其成为一种面向对象的编程 (OOP) 语言。由于对象是类的实例,它们能够保存数据以及操作数据的方法。由于这种编程方法将代码组织成对象而不是一系列过程式程序,因此被称为 OOP。

Python 中的双下划线方法被称为“dunder 方法”,它是“dunder”的缩写。这些是特殊的 Python 方法,例如 __init__ 或 __str__,它们在方法名称前后都有双下划线。

Python 特别重视 dunder 方法,因为它们允许您以指定的方式修改对象的行为。例如,当对象被创建时,__init__ 方法用于设置其属性,而 __str__ 方法用于返回对象的字符串表示。

_new_ 运算符

在 Python 中,类实例是通过 _new_ 运算符创建的。Python 中的类是使用 _new_ 运算符创建的,并使用 class 关键字定义。当创建类的新实例时,会调用一个名为 _new_ 运算符的特殊方法,它负责初始化对象的属性。

在 Python 中,_new_ 方法不经常使用,因为它主要用于管理对象的创建并执行自定义初始化。默认情况下,_new_ 方法用于创建和返回类实例。

例如,考虑以下类定义

代码

使用以下语法创建一个 Person 类的新实例

代码

在这种情况下,由于没有显式指定 _new_ 方法,Python 使用默认实现。然后使用 __init__ 函数初始化对象的属性。

但是,您可以构造一个特殊的 _new_ 方法来覆盖对象的创建过程。例如

代码

当创建 Person 类的新实例时,将调用此示例中定义的 _new_ 方法。_new_ 函数在打印一条消息指示正在创建类的实例后,调用 object 类中的 __new__ 方法来创建新实例。

然后,在新实例返回后,将调用 __init__ 函数来初始化对象的属性。尽管 Python 的 _new_ 函数是管理对象创建的强大工具,但应仅谨慎使用。建议仅在必要时使用 _new_ 方法,因为不当使用可能导致意外行为和问题。

总之,Python 的 _new_ 运算符用于构造类实例,并且每次创建新类实例时都会使用它。可以修改 _new_ 函数来修改对象的创建方式;默认情况下,它会创建一个类的新实例并返回它。_new_ 方法是一个强大的工具,但应谨慎使用,因为误用可能导致问题和意外行为。

示例程序

以下是如何使用 Python 的 __new__ 函数的示例。

代码

输出

Creating instance of MyClass

说明

在此示例中,MyClass 的 __new__ 函数在每次创建类的实例时都会输出一条消息。__new__ 方法在 __init__ 函数之前调用,并返回新创建的对象的引用。然后可以使用此引用来初始化对象,并将其传递给 __init__ 函数。在此示例中,我们使用 super() 函数调用了父类(即 Python 中的内置 object 类)的 __new__ 方法。

需要注意的是,直接使用 __new__ 函数并不是其预期用途。相反,每当创建类的新实例时,Python 都会自动调用它。但是,如果您想修改类的实例的创建方式,可以覆盖 __new__ 函数以定义自己的自定义行为。