在学习 Python __new__方法 之前,很多初学者可能会混淆它与 __init__ 方法的区别。其实,__new__ 是 Python 中真正负责创建对象实例的魔术方法,而 __init__ 只是负责初始化这个已经创建好的对象。

__new__ 是一个静态方法(虽然不需要显式用 @staticmethod 装饰),它在对象被创建时最先被调用。它的主要职责是返回一个类的新实例。如果你不重写它,Python 会使用默认的 object.__new__() 来创建对象。
简单来说:
- __new__:负责创建对象(分配内存)
- __init__:负责初始化对象(设置属性)
__new__ 的标准签名如下:
def __new__(cls, *args, **kwargs): instance = super().__new__(cls) return instance注意:cls 是当前类,必须作为第一个参数传入。你通常会调用父类的 __new__ 来创建实例,然后返回它。
我们来看一个例子,观察它们的调用顺序:
class MyClass: def __new__(cls, name): print("__new__ 被调用") instance = super().__new__(cls) return instance def __init__(self, name): print("__init__ 被调用") self.name = nameobj = MyClass("Alice")# 输出:# __new__ 被调用# __init__ 被调用可以看到,__new__ 先于 __init__ 执行。
单例模式是一种设计模式,确保一个类只有一个实例。我们可以利用 __new__ 来实现:
class Singleton: _instance = None def __new__(cls, *args, **kwargs): if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance def __init__(self, value=None): if not hasattr(self, 'initialized'): self.value = value self.initialized = True# 测试s1 = Singleton("第一次")s2 = Singleton("第二次")print(s1 is s2) # Trueprint(s1.value) # 第一次在这个例子中,无论你创建多少次 Singleton 实例,返回的都是同一个对象。这就是 Python对象创建 的强大之处。
__new__ 但没有返回一个实例,__init__ 将不会被调用。int, str, tuple)时,必须使用 __new__ 来定制行为,因为这些类型的实例一旦创建就不能修改。__new__ 是所有 Python魔术方法 中最底层的对象构造器之一。通过本教程,你应该已经理解了 Python __new__方法 的核心作用:它是对象创建的第一步,控制着实例的生成过程。虽然大多数情况下你不需要重写它,但在实现单例、自定义元类、或继承不可变类型时,__new__ 是不可或缺的工具。
掌握 __new__ 和 __init__ 的区别,是深入理解 Python类初始化 机制的关键一步。希望这篇教程能帮助你从“小白”进阶为更专业的 Python 开发者!
本文由主机测评网于2025-12-06发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123635.html