首頁 > 後端開發 > Python教學 > Python 的神奇方法

Python 的神奇方法

Patricia Arquette
發布: 2024-12-31 09:03:14
原創
434 人瀏覽過

Python

1-> __new__(cls) 方法

Python 中建立新物件時會呼叫 __new__ 方法。它負責建立並傳回類別的新實例。當您想要自訂物件建立時,通常會使用此方法,例如單例模式、快取或管理記憶體。

__new__ 什麼時候被呼叫?

__new__ 方法在 __init__ 之前調用,用於建立新物件。以下是建立新物件時的典型事件順序:

  1. __new__:建立物件(記憶體分配)。
  2. __init__:初始化物件(設定屬性)。

__new__ 的用例:

  1. 單例模式: Singleton 模式確保一個類別只存在一個實例。在這種情況下, __new__ 檢查實例是否已存在並重複使用它,而不是建立一個新實例。
   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
登入後複製
  1. 快取物件: 如果要根據某些條件快取對象,可以在建立新對象之前使用 __new__ 來檢查對像是否已存在(例如,在字典中)。這有助於優化記憶體使用。
   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
登入後複製
  1. 記憶體管理:
    如果你想要控制物件的記憶體分配(例如,最佳化記憶體使用或管理大物件),可以使用 __new__ 來自訂物件的建立方式。

  2. 不可變物件:
    __new__ 通常與不可變物件(如元組和字串)一起使用。例如,當你想要建立一個自訂的不可變物件時,你可以重寫 __new__ 以確保它被正確建立。

   class MyTuple(tuple):
       def __new__(cls, *args):
           return super().__new__(cls, args)

   t = MyTuple(1, 2, 3)
   print(t)  # (1, 2, 3)
登入後複製

總之:

  • __new__ 在建立物件時被呼叫,並負責傳回類別的實例
  • 它對於最佳化物件建立、實作單例模式、管理物件快取,甚至自訂記憶體分配很有用過程。

以上是Python 的神奇方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板