在寫python類時,或者看某些專案原始碼時,總是見到__init__
和__new__
方法,一直沒有深入研究兩者的區別,今天聊聊這個。
__new__
是類(class)方法。
class新建立例項時,會呼叫__new__
,它主要控制乙個新例項的建立。
需要知道的是,__new__
是例項建立的第一步。首先呼叫它,再由它負責返回類的新例項。
通常,__new__
除非您要繼承不可變型別(如str,int,unicode或tuple),否則不必重寫。
針對__new__
的用法,舉個栗子:
依照python官方文件的說法,__new__方法主要是當你繼承一些不可變的class時(比如int, str, tuple), 提供給你乙個自定義這些類的例項化過程的途徑。還有就是實現自定義的metaclass。
首先我們來看一下第乙個功能,具體我們可以用int來作為乙個例子:假如我們需要乙個永遠都是正數的整數型別,通過整合 int,我們可能會寫出這樣的**。
但執行後會發現,結果根本不是我們想的那樣,我們任然得到了-3。
這是因為對於int這種 不可變的物件,我們只有過載它的__new__方法才能起到自定義的作用。這是修改後的**:
通過過載__new__方法,我們實現了需要的功能。
__init__
是例項方法。
class呼叫__init__
時,是對這個class生成的新例項初始化,初始化的內容,就是__init__
內定義的內容。
每新建立乙個例項,例項都會初始化這些內容,這些內容都是初始化給新建立的例項,跟class無關。
__init__
不返回任何東西。建立例項後,它僅負責初始化例項,且僅在需要初始化某些內容時,才會進行呼叫。
參考文件:本文首發於bigyoung小站
Python類中的 new 和 init
在寫python類時,或者看某些專案原始碼時,總是見到 init 和 new 方法,一直沒有深入研究兩者的區別,今天聊聊這個。new 是類 class 方法。class新建立例項時,會呼叫 new 它主要控制乙個新例項的建立。需要知道的是,new 是例項建立的第一步。首先呼叫它,再由它負責返回類的新...
c 中的new 類建構函式 new
我們都知道在例項化乙個類時會使用這個類的 init 方法,但是在真實情況中類的例項化是分成兩個階段的,第一階段是使用該類的 new 方法例項化乙個物件,第二階段才是使用物件的 init 方法進行初始化。由於很多時候,第乙個階段被我們忽略了,所以看起來例項化類時只使用了 init 方法。既然在例項化類...
詳解Python中的 init 和 new
一 init 方法是什麼?使用python寫過物件導向的 的同學,可能對 init 方法已經非常熟悉了,init 方法通常用在初始化乙個類例項的時候。例如 複製 如下 coding utf 8 class person object silly person def init self,name,a...