python類中的__init__和__new__方法


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__中也要帶上參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM