__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)
輸出結果爲: