Python中類:
Python中在創建類的過程中最先調用的不是__init__方法而是__new__方法,__new__方法是一個靜態方法,在創建一個類對象時其實是通過__new__方法首先創建出一個類實例,然后通過__init__方法初始化這個實例對象。
class Dog(object): def __init__(self): print("----init方法-----") def __del__(self): print("----del方法-----") def __str__(self): print("----str方法-----") return "對象的描述信息" def __new__(cls):#cls此時是Dog指向的那個類對象 #print(id(cls)) print("----new方法-----") return object.__new__(cls) #print(id(Dog)) xtq = Dog() ---------------------
上例中代碼執行結果是:
----new方法-----
----init方法-----
----del方法-----
由此可以看出當實例化一個類對象時最先調用的就是__new__方法。
__new__方法至少要有一個參數cls,代表要實例化的類,此參數在實例化時由python解釋器自動提供。
__new__方法必須要有返回值,返回實例化出來的實例,可以return父類__new__出來的實例,或者直接是object的__new__出來的實例。
__init__有一個參數self,就是這個__new__返回的實例,__init__在__new__的基礎上可以完成一些其他的初始化的動作,__init__不需要返回值。
class Dog(object): def __init__(self,name): self.name = abs(name) print("----init方法-----") print(self.name) def __del__(self): print("----del方法-----") def __str__(self): print("----str方法-----") return "對象的描述信息" def __new__(cls,name):#cls此時是Dog指向的那個類對象 #print(id(cls)) print("----new方法-----") return object.__new__(cls) #print(id(Dog)) xtq = Dog(15.00)
修改后給類對象添加參數如果類帶參數__new__和__init__中也要帶上參數。
