Python類中的 new 和 init

2021-10-23 08:37:10 字數 1191 閱讀 3720

在寫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...