python的__new__方法及重寫__new__方法

__new__方法

  • 使用類名()創建對象的時候,python解釋器首先會調用__new__方法爲對象分配空間

  • __new__是一個由object基類提供的內置的靜態方法,主要作用有兩個:
    1.在內存中爲對象分配空間
    2.返回對象的引用

  • python解釋器獲得對象的引用後,將引用作爲第一個參數,傳遞給__init__方法

方法:重寫__new__方法的代碼非常固定

  • 重寫__new__方法一定要 return super().__new__(cls)
  • 否則python解釋器得不到分配了空間的對象引用,就不會調用對象的初始化方法
  • 注意:__new__是一個靜態方法,在調用時需要主動傳遞cls參數
    在這裏插入圖片描述以下是沒有用new重寫的代碼:
class MusicPlayer(object):

    def __new__(cls, *args, **kwargs):
        print("this is new 方法")

    def __init__(self):
        print("this is init 方法")


music = MusicPlayer()
print(music)

輸出結果爲:
在這裏插入圖片描述

可以看出初始化init方法並沒有被調用,這是什麼原因?這是因爲重寫了__new__方法之後,沒有返回分配的內存空間,也就是代碼: return super().__new__(cls)
修改後的代碼:

class MusicPlayer(object):

    def __new__(cls, *args, **kwargs):
        print("this is new 方法")

        #爲對象分配空間:super().__new__(cls)
        #返回對象的引用
        return super().__new__(cls)

    def __init__(self):
        print("this is init 方法")


music = MusicPlayer()
print(music)

輸出結果爲:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章