理解__init__() 和__new__() 的順序
在Python 中, __new__() 和__init__() 方法起著至關重要的作用在實例創建過程中。然而,許多開發人員想知道為什麼 __init__() 總是在 __new__() 之後呼叫。
__new__() 的用途
__new__() 負責控制 __new__() 的建立一個新實例。它初始化實例的分配並傳回實例本身。本質上,__new__() 決定是建立新實例還是重複使用現有實例。
__init__()
__init__() 的用途用於物件初始化。它設定實例的屬性並運行任何必要的設定代碼。 __init__() 不會回傳任何內容,因為它的主要目的是初始化物件的狀態。
實例建立中的順序
實例建立中的順序總是:
範例
下面的例子說明了 __new__()如何控制實例建立:
class A(object): _dict = dict() def __new__(cls): if 'key' in A._dict: print("EXISTS") return A._dict['key'] else: print("NEW") return super(A, cls).__new__(cls) def __init__(self): print("INIT") A._dict['key'] = self print("") a1 = A() a2 = A() a3 = A()
輸出:
NEW INIT EXISTS INIT EXISTS INIT
如您所見,__new__() 首先檢查 _dict 中是否已存在實例。如果是,則傳回該現有實例。否則,它會建立一個新實例並傳回它。然後呼叫 __init__() 來初始化每個實例。
使用 __new__() 的替代方案
大多數情況下,使用 __new__() 來實現您自己的享元設計模式不建議。相反,請考慮使用工廠類別或物件池來管理實例的建立和重複使用。
以上是為什麼Python的`__init__()`總是在`__new__()`之後呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!