在Python中,`__new__`方法是一个静态方法,用于创建并返回一个新的对象实例。当你重写`__new__`方法时,通常需要确保调用`super().__new__(cls)`来创建对象实例,并返回它。下面是一个简单的例子,展示了如何在Python中重写`__new__`方法:
class MyClass:def __new__(cls, *args, kwargs):在这里可以添加自定义逻辑,比如单例模式if not hasattr(cls, 'instance'): 检查是否已有实例cls.instance = super().__new__(cls) 创建新实例return cls.instance 返回实例def __init__(self):if not hasattr(self, 'initialized'): 检查是否已初始化print("对象已初始化")self.initialized = True使用自定义的__new__方法创建对象obj1 = MyClass()obj2 = MyClass()输出结果print(obj1 is obj2) 输出 True,表明obj1和obj2指向同一个实例
在这个例子中,`MyClass`的`__new__`方法确保了该类只有一个实例。每次创建新对象时,`__new__`方法都会检查是否已经存在一个实例,如果不存在,则创建一个新的实例并返回;如果存在,则直接返回现有实例。
如果你需要返回其他类的实例,可以在`__new__`方法中根据条件创建并返回不同的类实例。例如:

class A:def __init__(self, data=None, kwargs):self.data = dataclass B:def __init__(self, data=None, kwargs):self.data = dataclass MyClass:def __new__(cls, *args, kwargs):if kwargs.pop('another', False):如果指定了'another'为True,返回B类的实例return B(*args, kwargs)else:否则返回A类的实例return A(*args, kwargs)使用自定义的__new__方法创建对象obj1 = MyClass(another=True)obj2 = MyClass()输出结果print(obj1 is obj2) 输出 False,表明obj1和obj2指向不同的实例
在这个例子中,`MyClass`的`__new__`方法根据`another`参数的值决定返回`A`类还是`B`类的实例。
请注意,重写`__new__`方法时,务必确保调用`super().__new__(cls)`来创建对象实例,否则可能会导致对象创建不正确或不完整。如果你只继承自`object`类,你也可以使用`object._new__(cls)`,但这不是推荐的做法,因为它可能会导致一些与对象生命周期相关的问题。
