.__new__方法
·使用類名()創建對象時,Python的解釋器首先會調用__new__方法爲對象分配空間
·__new__是一個由object基類提供的內置的靜態方法,主要作用有兩個:
1)在內存中爲對象 分配空間
2)返回 對象的引用
·Python的解釋器獲得對象的引用後,將引用作爲第一個參數,傳遞給__init__方法
·重寫__new__方法的代碼非常固定
·重寫__new__一定要return super().new(cls),否則Python的解釋器得不到分配了空間的對象引用,就不會調用對象的初始化方法
·注意:__new__是一個靜態方法,在調用時需要主動傳遞cls參數
看個例子:
#__new__方法的重寫過程
class Musicplayer(object) :
#重寫object基類中的__new__方法
#__new__方法可以接收3個參數
#cls——哪一個類調用就傳遞哪一個類
#一個*表示這個參數是個多值的元組參數,兩個**表示這是參數是個多值的字典參數
def __new__(cls, *args, **kwargs):
#1. 重寫__new__方法。創建對象時,__new__方法會被自動調用
print('創建對象,分配空間')
#2. 爲對象分配空間 用super(). 來調用父類方法
room = super().__new__(cls)
#3. 注意返回對象的引用
return room
def __init__(self):
print('播放器初始化')
player = Musicplayer()
print(player)
這是結果:
創建對象,分配空間
播放器初始化
<__main__.Musicplayer object at 0x00000145FEB460F0>