欢迎访问宙启技术站
智能推送

Python中的__new__()方法是什么

发布时间:2023-12-29 04:10:36

__new__()方法是Python中一个特殊的方法,用于创建对象并返回该对象的实例。它是在__init__()方法之前被调用的,主要用于创建不可变的对象,或者在创建一个新的对象之前需要进行一些特殊的处理。

__new__()方法的使用例子如下:

class Singleton:
    instance = None

    def __new__(cls, *args, **kwargs):
        if not cls.instance:
            cls.instance = super().__new__(cls)
        return cls.instance

s1 = Singleton()
s2 = Singleton()

print(s1 is s2)  # 输出: True

在这个例子中,我们创建了一个Singleton类,该类只能创建一个实例。类变量instance用于存储 的实例。在__new__()方法中,我们首先检查instance是否为None。如果instance为None,则调用父类的__new__()方法创建一个新的实例,并将其赋值给instance。如果instance不为None,则直接返回instance。这样,在调用Singleton类的构造函数__init__()时,始终返回同一个实例。这就实现了单例模式,确保只有一个实例被创建。

另一个使用__new__()方法的例子是在创建不可变对象时进行特殊处理。在Python中,不可变对象是指其值创建后不能修改的对象,例如整数、字符串和元组。__new__()方法允许我们在创建这些不可变对象之前进行一些处理,以确保对象的 性。例如,我们可以创建一个字符串的子类,确保只有一个实例:

class UniqueString(str):
    instances = {}

    def __new__(cls, value):
        if value not in cls.instances:
            cls.instances[value] = super().__new__(cls, value)
        return cls.instances[value]

s1 = UniqueString("Hello")
s2 = UniqueString("Hello")

print(s1 is s2)  # 输出: True

在这个例子中,我们创建了一个UniqueString类,该类继承自内置的str类。类变量instances用于存储 的实例。在__new__()方法中,我们首先检查value是否存在instances字典中。如果不存在,则调用父类的__new__()方法创建一个新的实例,并将其赋值给instances[value]。如果value已经存在instances字典中,则直接返回instances[value]。这样,无论创建多少个具有相同值的UniqueString对象,始终只有一个实例被创建。

总结来说,Python中的__new__()方法是一个用于创建对象并返回该对象实例的特殊方法,可用于创建单例对象或在创建不可变对象时进行特殊处理。