每天至少打卡一道python面試題逻锐。以盡量多的方式解鎖題目恩袱,如果有遺漏的方法泣棋,歡迎在評論區(qū)補充。希望大家一起提高畔塔!
首先從字面意思理解潭辈,new是表示新建對象,init表示初始化對象澈吨。
我們來通過下面一段代碼來了解__new__和__init__的區(qū)別
class Demo(object):
def __new__(cls):
print('This is __new__')
return super().__new__(cls)
def __init__(self):
print('This is __init__')
if __name__ == '__main__':
Demo()
# This is __new__
# This is __init__
從打印結(jié)果把敢,可看出創(chuàng)建一個類實例的時候,先執(zhí)行__new__谅辣,再執(zhí)行__init__修赞。
上面這段代碼的執(zhí)行邏輯:
- 調(diào)用Demo()時,先調(diào)用__new__桑阶,創(chuàng)建并返回一個新對象
- 再執(zhí)行__init__柏副,進行初始化自身的一些操作,比如添加屬性蚣录,__init__里的self其實就是__new__返回的實例對象
所以__new__和self的主要區(qū)別就是:
- __new__ 通常用于控制一個新實例生成的過程割择。是類級別的方法。
- __init__ 通常用于初始化一個新實例萎河,控制這個實例初始化的過程荔泳,比如添加屬性、參數(shù)處理或其他操作等虐杯,發(fā)生在類實例被創(chuàng)建(__new__)之后