日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python __init__ __new___Python中的__init__和__new__介绍

發布時間:2024/2/28 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python __init__ __new___Python中的__init__和__new__介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹

首先我們要知道在面向對象編程中,實例化基本遵循創建實例對象、初始化實例對象、最后返回實例對象這么一個過程。

Python 中的 __new__ 方法負責創建一個實例對象,__init__ 方法負責將該實例對象進行初始化。

__new__() 是在新式類中新出現的方法,它作用在構造方法建造實例之前,可以這么理解,在 Python 中存在于類里面的構造方法 __init__() 負責將類的實例化,而在 __init__() 啟動之前,__new__() 決定是否要使用該 __init__() 方法,因為__new__() 可以調用其他類的構造方法或者直接返回別的對象來作為本類的實例。

__new__(),第一個參數cls是當前正在實例化的類。

class Example(object):

def __init__(self, *args, **kwargs):

pass

def __new__(cls, *args, **kwargs):

return object.__new__(cls, *args, **kwargs)

重點:

事實上如果(新式)類中沒有重寫__new__()方法,即在定義新式類時沒有重新定義__new__()時,Python默認是調用該類的直接父類的__new__()方法來構造該類的實例,如果該類的父類也沒有重寫__new__(),那么將一直按此規矩追溯至object的__new__()方法,因為object是所有新式類的基類。

而如果新式類中重寫了__new__()方法,那么你可以自由選擇任意一個的其他的新式類(必定要是新式類,只有新式類必定都有__new__(),因為所有新式類都是object的后代,而經典類則沒有__new__()方法)的__new__()方法來制造實例,包括這個新式類的所有前代類和后代類,只要它們不會造成遞歸死循環。

如果__new__()沒有返回cls(即當前類)的實例,那么當前類的__init__()方法是不會被調用的。如果__new__()返回其他類(新式類或經典類均可)的實例,那么只會調用被返回的那個類的構造方法。

__new__ 的作用

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

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

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

class ExampleInteger(int):

def __init__(self, value):

super(ExampleInteger, self).__init__(self, abs(value))

i = ExampleInteger(-3)

print i

但運行后會發現,結果根本不是我們想的那樣,我們任然得到了-3。這是因為對于int這種 不可變的對象,我們只有重載它的__new__方法才能起到自定義的作用。

這是修改后的代碼:

寫法一:

class ExampleInteger(int):

def __new__(cls, value):

return int.__new__(cls, abs(value))

i = ExampleInteger(-3)

print i

寫法二:

class ExampleInteger(int):

def __new__(cls, value):

return super(ExampleInteger, cls).__new__(cls, abs(value))

i = ExampleInteger(-3)

print i

通過重載__new__方法,我們實現了需要的功能。

super

super 是用來解決多重繼承問題的,直接用類名調用父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查找順序(MRO)、重復調用(鉆石繼承)等種種問題。

總結

以上是生活随笔為你收集整理的python __init__ __new___Python中的__init__和__new__介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 激情亚洲色图 | 免费动漫av | 中文字幕第315页 | 亚洲成人观看 | 中文字幕在线第一页 | 国产成人精品久久二区二区91 | 精品久久久一区 | 91精品视频免费看 | 中日韩午夜理伦电影免费 | 韩国一级淫片免费看 | 国产精品视频第一页 | 国产一级做a爰片久久毛片男 | 久久国产精品精品国产色婷婷 | 91精品国产亚洲 | 国产人成视频在线观看 | 天堂色综合 | 国产一区在线视频 | 成人午夜视频在线观看 | xxxxx毛片| 中文字幕在线亚洲 | 琪琪色在线观看 | 7色av| 狠狠干狠狠插 | 少妇无套高潮一二三区 | 亚洲自拍天堂 | 国产大片一区 | 黄在线免费观看 | 色综合久久久久无码专区 | 亚洲精品视频网址 | 日日插日日操 | 婷婷精品 | 亚洲成人精品在线播放 | 国产在线激情视频 | 自拍偷拍色综合 | 性欧美13一14内谢 | 国产视频一级 | 久久三级精品 | 尤物在线视频观看 | 日韩欧美中文在线观看 | 波多野结衣一区二区三区高清av | 久久无码人妻一区二区三区 | 欧美视频日韩视频 | 欧美日本另类 | 97国产高清| 夜夜天天 | 日本欧美在线观看 | 九色精品 | 少妇15p | 日韩中文一区二区 | 顶级嫩模啪啪呻吟不断好爽 | 色爱av综合| 亚洲一区二区网站 | 夫妻性生活黄色大片 | 欧美三级手机在线观看 | 日本性猛交 | 丰满的女邻居 | 国产精品无码粉嫩小泬 | 亚洲伊人成人网 | 成人动漫免费观看 | 美女脱裤子打屁股 | 处女朱莉第一次 | 少妇一夜三次一区二区 | 亲子伦视频一区二区三区 | 日韩久久一区二区三区 | 国产欧美精品一区二区三区app | 99精品国产一区二区 | 91精品国产高清一区二区三蜜臀 | 无码人妻aⅴ一区二区三区玉蒲团 | 国产亚洲欧美在线精品 | 少妇精品一区二区三区 | 91成人在线观看喷潮 | 欧美性猛交69| 在线欧美一区二区 | 国产综合视频在线观看 | 黑人操亚洲美女 | 男女啪啪无遮挡 | 98精品视频 | 视频在线中文字幕 | 超碰在线98 | 精品久久久一区二区 | 精品99在线| 日日躁狠狠躁 | 色哟哟精品观看 | 91热精品| 超91在线 | 色骚网| 天天摸夜夜添狠狠添婷婷 | 亚洲字幕成人中文在线观看 | 亚洲天堂av一区二区三区 | 在线免费观看av网站 | 国产无遮挡a片又黄又爽 | 日韩精品中文字幕在线 | 国产在线精品观看 | 调教少妇视频 | 亚洲综合一区在线 | 神马午夜电影一区二区三区在线观看 | 茄子av在线| 一区三区视频在线观看 | 成人在线视频一区二区三区 |