1.有關__new__方法的介紹
__new__方法調用在構造方法構造實例之前,即在__init__方法執行之前,我們可以這樣理解,他的作用是決定是否適用這個__iint__方法來構造實例,但是需要注意,__new__只出現在新式類中,在經典類中沒有這個方法.本質上__new__是一個靜態方法.
2.有關__new__的使用
上面我們介紹__new__方法,下面我們來看一下他是如何使用的
class User(object): def __init__(self,name): self.name = name print("__init__方法被調用") @staticmethod def __new__(cls, *args, **kwargs): print("__new__方法被調用") return object.__new__(cls) if __name__ == '__main__': u1 = User("name")
上面代碼的執行結果如下:
通過上面的結果我們可以知道,__new__方法執行在__init__方法之前
我們在來解釋下他的用法:
1)__new__方法必須有參數cls,cls指的是當前正在實例化的類
2)__new__必須有返回值,返回的是實例,如果是使用當前類構造的實例,可以用object.__new__(cls),也可以用父類名.__new__(cls)
3)__init__方法的參數self其實就是__new__方法返回的實例對象,在這個__init__方法中還可以對這個實例進行其他的操作,比如添加一些屬性等
注:實際上在新式類中我們不是必須要重寫這個__new__方法,python是默認調用這個類的直接父類的__new__方法來構造實例的
通常這個__new__方法用在單例模式的實現上