在學習python面向對象的時候,經常會接觸
__init__()
方法,而__new__()
方法則較少接觸,這裏記錄一下它們的作用及區別
[Python3]__init__
和 __new__
的區別
- 首先
__init__
是一個實例方法,而__new__
是一個靜態方法 __init__()
就像他的名字一樣,是用於初始化對象的,在對象已經生成之後被自動調用,因此有了我們經常用到的類似如下的語句
def __init__(self, arg):
super().__init__(arg)
- 而
__new__
方法則是創建對象的方法,是一個靜態方法,至少要有一個參數cls
:當前要生成的對象的類名,當我們用類名+()
的形式來創建對象的時候,首先會自動調用__new__
方法來創建對象,cls
參數也自動給出,之後再使用__init__
來初始化對象
(這一點上python就和C系列語言或是java不太一樣,個人認爲這個設計更加體現出了python的動態語言特性)