本文始發於個人公眾號: TechFlow ,原創不易,求個關注 今天這篇是 Python專題 的第17篇文章,我們來聊聊Python當中一個新的默認函數__new__。 上一篇當中我們講了如何使用type函數來動態創建Python當中的類,除了type可以完成這一點之外,還有另外一種用法叫做metaclass。原本這一篇應該是繼續元類的內容,講解metaclass的使用。但是metaclass當中用到了一個 新的默認函數__new__ ,關於這個函數大家可能會比較陌生,所以在我們研究metaclass之前,我們先來看看__new__這個函數的用法。 真假構造函數 如果你去面試Python工程師的崗位,面試官問你,請問Python當中的類的 構造函數 是什麼? 你不假思索,當然是__init__啦!如果你這麼回答,很有可能你就和offer無緣了。因為在Python當中__init__並不是構造函數,__new__才是。是不是有點蒙,多西得(日語:為什麼)?我們不是一直將__init__方法當做構造函數來用的嗎?怎麼又冒出來一個__new__,如果__new__才是構造函數,那麼 為什麼我們創建類的時候從來不用它呢? 別著急,我們慢慢來看。首先我們回顧一下__init__的用法,我們隨便寫一段代碼: class Student : def __init__ (self, name, gender) : self.name = name self.gender = gender 我們一直都是這麼用的,對不對,毫無問題。但是我們換一個問題,我們在Python當中怎麼實現單例(Singleton)的設計模式呢?怎麼樣實現工廠呢? 從這個問題出發,你會發現只使用__init__函數是不可能完成的,因為__init__並不是構造函數,它只是 初始化方法 。也就是說在調用__init__之前,我們的...