Python 中创建新对象时会调用 __new__ 方法。它负责创建并返回类的新实例。当您想要自定义对象创建时,通常使用此方法,例如单例模式、缓存或管理内存。
__new__ 方法在 __init__ 之前调用,用于创建新对象。以下是创建新对象时的典型事件顺序:
class Singleton: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super(Singleton, cls).__new__(cls) return cls._instance s1 = Singleton() s2 = Singleton() print(s1 is s2) # True, both are the same instance
class CachedObject: _cache = {} def __new__(cls, value): if value in cls._cache: return cls._cache[value] obj = super().__new__(cls) cls._cache[value] = obj return obj obj1 = CachedObject("hello") obj2 = CachedObject("hello") print(obj1 is obj2) # True, the same object is reused
内存管理:
如果你想控制对象的内存分配(例如,优化内存使用或管理大对象),可以使用 __new__ 来自定义对象的创建方式。
不可变对象:
__new__ 通常与不可变对象(如元组和字符串)一起使用。例如,当你想创建一个自定义的不可变对象时,你可以重写 __new__ 以确保它被正确创建。
class MyTuple(tuple): def __new__(cls, *args): return super().__new__(cls, args) t = MyTuple(1, 2, 3) print(t) # (1, 2, 3)
以上是Python 的神奇方法的详细内容。更多信息请关注PHP中文网其他相关文章!