最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python函數(shù)__new__及__init__作用及區(qū)別解析

 更新時間:2020年08月31日 10:14:07   作者:lincappu  
這篇文章主要介紹了Python函數(shù)__new__及__init__作用及區(qū)別解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

【同】

  二者均是Python面向?qū)ο笳Z言中的函數(shù),__new__比較少用,__init__則用的比較多。

【異】

__new__是在實例創(chuàng)建之前被調(diào)用的,因為它的任務(wù)就是創(chuàng)建實例然后返回該實例對象,是個靜態(tài)方法。__init__是當(dāng)實例對象創(chuàng)建完成后被調(diào)用的,然后設(shè)置對象屬性的一些初始值,通常用在初始化一個類實例的時候。是一個實例方法。

也就是:__new__先被調(diào)用,__init__后被調(diào)用,__new__的返回值(實例)將傳遞給__init__方法的第一個參數(shù),然后__init__給這個實例設(shè)置一些參數(shù)。

===》》》

【一些說明】

1、繼承自object的新式類才有__new__

2、__new__至少要有一個參數(shù)cls,代表當(dāng)前類,此參數(shù)在實例化時由Python解釋器自動識別

3、__new__必須要有返回值,返回實例化出來的實例,這點在自己實現(xiàn)__new__時要特別注意,可以return父類(通過super(當(dāng)前類名, cls))__new__出來的實例,或者直接是object的__new__出來的實例

4、__init__有一個參數(shù)self,就是這個__new__返回的實例,__init__在__new__的基礎(chǔ)上可以完成一些其它初始化的動作,__init__不需要返回值

5、如果__new__創(chuàng)建的是當(dāng)前類的實例,會自動調(diào)用__init__函數(shù),通過return語句里面調(diào)用的__new__函數(shù)的第一個參數(shù)是 cls 來保證是當(dāng)前類實例,如果是其他類的類名,;那么實際創(chuàng)建返回的就是其他類的實例,其實就不會調(diào)用當(dāng)前類的__init__函數(shù),也不會調(diào)用其他類的__init__函數(shù)。

6、在定義子類時沒有重新定義__new__()時,Python默認(rèn)是調(diào)用該類的直接父類的__new__()方法來構(gòu)造該類的實例,如果該類的父類也沒有重寫__new__(),那么將一直按此規(guī)矩追溯至object的__new__()方法,因為object是所有新式類的基類。

7、而如果子類中重寫了__new__()方法,那么你可以自由選擇任意一個的其他的新式類(必定要是新式類,只有新式類必定都有__new__(),因為所有新式類都是object的后代,而經(jīng)典類則沒有__new__()方法)的__new__()方法來制造實例,包括這個新式類的所有前代類和后代類,只要它們不會造成遞歸死循環(huán)。反正肯定不能調(diào)用自己的__new__,這肯定是死循環(huán)。

8、對于子類的__init__,其調(diào)用規(guī)則跟__new__是一致的,當(dāng)然如果子類和父類的__init__函數(shù)都想調(diào)用,可以在子類的__init__函數(shù)中加入對父類__init__函數(shù)的調(diào)用。

9、我們在使用時,盡量使用__init__函數(shù),不要去自定義__new__函數(shù),因為這兩者在繼承派生時的特性還是很不一樣的。

10、將類比作制造商,__new__方法就是前期的原材料購買環(huán)節(jié),__init__方法就是在有原材料的基礎(chǔ)上,加工,初始化商品環(huán)節(jié)

【__init__方法】

【__new__方法】

__new__方法接受的參數(shù)雖然也是和__init__一樣,但__init__是在類實例創(chuàng)建之后調(diào)用,而 __new__方法正是創(chuàng)建這個類實例的方法。

===》

具體的執(zhí)行邏輯:

1. p = Person(name, age)

2. 首先執(zhí)行使用name和age參數(shù)來執(zhí)行Person類的__new__方法,這個__new__方法會返回Person類的一個實例(通常情況下是使用 super(Persion, cls).__new__(cls, ... ...) 這樣的方式),

3. 然后利用這個實例來調(diào)用類的__init__方法,上一步里面__new__產(chǎn)生的實例也就是 __init__里面的的 self。

所以,__init__ 和 __new__ 最主要的區(qū)別在于:

1.__init__ 通常用于初始化一個新實例,控制這個初始化的過程,比如添加一些屬性, 做一些額外的操作,發(fā)生在類實例被創(chuàng)建完以后。它是實例級別的方法。

2.__new__ 通常用于控制生成一個新實例的過程。它是類級別的方法。

【__new__的作用】

依照Python官方文檔的說法,__new__方法主要是當(dāng)你繼承一些不可變的class時(比如int, str, tuple), 提供給你一個自定義這些類的實例化過程的途徑。還有就是實現(xiàn)自定義的metaclass。

首先我們來看一下第一個功能,具體我們可以用int來作為一個例子:

假如我們需要一個永遠(yuǎn)都是正數(shù)的整數(shù)類型,通過集成 int,我們可能會寫出這樣的代碼。

但運行后會發(fā)現(xiàn),結(jié)果根本不是我們想的那樣,我們?nèi)稳坏玫搅?3。這是因為對于int這種 不可變的對象,我們只有重載它的__new__方法才能起到自定義的作用。

這是修改后的代碼:

通過重載__new__方法,我們實現(xiàn)了需要的功能。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python設(shè)置環(huán)境變量的原因和方法

    python設(shè)置環(huán)境變量的原因和方法

    在本篇文章中我們給大家整理了關(guān)于python為什么要設(shè)置環(huán)境變量的相關(guān)知識點,有興趣的朋友們參考下。
    2019-06-06
  • python如何利用re模塊正則表達(dá)式匹配ip地址

    python如何利用re模塊正則表達(dá)式匹配ip地址

    這篇文章主要介紹了python如何利用re模塊正則表達(dá)式匹配ip地址問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python利用shutil模塊實現(xiàn)文件夾的復(fù)制刪除與裁剪

    Python利用shutil模塊實現(xiàn)文件夾的復(fù)制刪除與裁剪

    shutil模塊是對os模塊的補充,主要針對文件的拷貝、刪除、移動、壓縮和解壓操作。本文將利用shutil模塊實現(xiàn)文件夾的復(fù)制刪除與裁剪,需要的可以參考一下
    2022-05-05
  • Python生成任意范圍任意精度的隨機數(shù)方法

    Python生成任意范圍任意精度的隨機數(shù)方法

    下面小編就為大家分享一篇Python生成任意范圍任意精度的隨機數(shù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 2025最新版Python3.13.1安裝使用指南(超詳細(xì))

    2025最新版Python3.13.1安裝使用指南(超詳細(xì))

    Python編程語言自誕生以來,已經(jīng)成為全球最受歡迎的編程語言之一,它簡單易學(xué)易用,以標(biāo)準(zhǔn)庫和功能強大且廣泛外 掛的擴展庫,為用戶提供包羅萬象、強大全面的功能,此次給大家介紹了2025年最新版Python 3.13.1安裝使用指南全面更新,需要的朋友可以參考下
    2025-03-03
  • Python使用python-docx-template的實用案例解析

    Python使用python-docx-template的實用案例解析

    Python-docx-template是一個功能強大的Word文檔自動化生成庫,本文將進一步結(jié)合官方示例,提供多個實用場景的代碼解析與拓展,希望對大家有所幫助
    2026-01-01
  • Python自動化辦公的10個腳本合集(含源碼)

    Python自動化辦公的10個腳本合集(含源碼)

    這篇文章主要為大家詳細(xì)介紹了Python自動化辦公的10個腳本合集,這些腳本覆蓋郵件、Excel處理、圖片、PDF和歸檔等常見辦公場景,大家可以根據(jù)需要進行選擇
    2025-11-11
  • pandas數(shù)據(jù)聚合與分組運算的實現(xiàn)

    pandas數(shù)據(jù)聚合與分組運算的實現(xiàn)

    本文主要介紹了pandas數(shù)據(jù)聚合與分組運算的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 如何將你的應(yīng)用遷移到Python3的三個步驟

    如何將你的應(yīng)用遷移到Python3的三個步驟

    這篇文章主要介紹了如何將你的應(yīng)用遷移到Python3的三個步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • python?(pyqt)?表格顯示圖片的實現(xiàn)方式

    python?(pyqt)?表格顯示圖片的實現(xiàn)方式

    這篇文章主要介紹了python?(pyqt)?表格顯示圖片的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評論

绥江县| 南木林县| 遵化市| 永靖县| 武强县| 永吉县| 丹巴县| 襄汾县| 原阳县| 蛟河市| 洪洞县| 六安市| 南开区| 岳阳市| 博爱县| 灵寿县| 都安| 景德镇市| 扶余县| 桃江县| 玛曲县| 佛冈县| 泗洪县| 盱眙县| 奇台县| 翁牛特旗| 华容县| 石渠县| 盖州市| 博乐市| 酉阳| 固始县| 萨嘎县| 嵊泗县| 麦盖提县| 本溪| 峨眉山市| 乡城县| 长顺县| 印江| 双江|