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中文網其他相關文章!