亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術(shù)文章
文章詳情頁

【python小白】 問關(guān)于__new__方法的作用的問題

瀏覽:137日期:2022-06-27 14:17:37

問題描述

代碼A:

# -*- coding:gb2312 -*-class Dog (object): def __init__(self):print('-----init方法-----') def __del__(self):print('-----del方法-----') def __str__(self):#print('-----str方法-----')return ('-----str方法-----') def __new__(cls):print('-----new方法-----')#return object.__new__(cls)xtq = Dog()

代碼A運行結(jié)果:【python小白】 問關(guān)于__new__方法的作用的問題

代碼B:

# -*- coding:gb2312 -*-class Dog (object): def __init__(self):print('-----init方法-----') def __del__(self):print('-----del方法-----') def __str__(self):#print('-----str方法-----')return ('-----str方法-----') def __new__(cls):print('-----new方法-----')object.__new__(cls)xtq = Dog()

代碼B運行結(jié)果:【python小白】 問關(guān)于__new__方法的作用的問題

代碼C:

# -*- coding:gb2312 -*-class Dog (object): def __init__(self):print('-----init方法-----') def __del__(self):print('-----del方法-----') def __str__(self):#print('-----str方法-----')return ('-----str方法-----') def __new__(cls):print('-----new方法-----')return object.__new__(cls)xtq = Dog()

代碼C運行結(jié)果:

【python小白】 問關(guān)于__new__方法的作用的問題

我的問題一:這三段代碼A,B,C為什么輸出的結(jié)果都不一樣,原理在于哪里呢?特別是代碼B和代碼C,為什么代碼C這一段,在B的基礎(chǔ)上加上了return,結(jié)果就比B多了一個init方法。我的問題二:在給方法傳參數(shù)的時候self和cls 這兩個參數(shù)有啥區(qū)別?為什么__new__這個方法要的參數(shù)是cls而__init__方法要傳入的參數(shù)是self?

問題解答

回答1:

首先得先明白一件事情: self和cls的區(qū)別, cls是代表這個類, slef是用來代表這個類的實例, 如果這個搞清楚, 就成功了一點.

函數(shù)參數(shù)帶有self的, 可以理解成這個函數(shù), 是實例的方法, 是要和實例綁定的.

__new__方法, 是新式類用來創(chuàng)建實例使用的, 傳入的cls就是用來給object.__new__創(chuàng)建實例使用的參數(shù), 如果沒有傳入cls, object根本不知道創(chuàng)建什么樣的實例.

結(jié)合上面, 現(xiàn)在再來說下三個輸出不同的原因:

為什么只有--new, 因為每個類在實例化對象時, 都必須要調(diào)用這個__new__方法, 去創(chuàng)建實例, 所以它肯定會被調(diào)用, 但是因為該函數(shù)被你重寫了, 所以它只是打印了--new方法, 并沒有返回創(chuàng)建實例, 并且放回, 所以__del__也是不會發(fā)生

為什么只有--new和--del, 正如第1點說的那樣, 但是這里確實__new___有創(chuàng)建新實例, 但是并沒有返回, 因為只有返回了, 該對象才能進行下一步的__init__, 正因為這里只有創(chuàng)建, 沒有返回, 所以結(jié)果這樣

如果看懂前兩點, 相信這個應(yīng)該沒啥問題, 因為創(chuàng)建了,并且返回了, 所以’__init__’也同樣被執(zhí)行了, 所有的東西都是像正常的行為那樣發(fā)生

最后想說明: 為什么__del__會被執(zhí)行, 理論上, 這個只有在實例被del析構(gòu)時, 才會執(zhí)行,這里并沒有del xtq類似的代碼, 為什么也會執(zhí)行, 原因就是, 程序結(jié)束了, 要退出了, 在執(zhí)行更底層的程序退出時, python自發(fā)做的內(nèi)存回收, 所以一切塵歸塵土歸土, 創(chuàng)建的對象也被一一析構(gòu)

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 欧美国产在线视频 | 久久一级视频 | 精品久久网 | 岛国片欧美一级毛片 | 亚洲成人www| 国产综合久久一区二区三区 | 国产精品美女视视频专区 | 九九综合九九综合 | 97在线视频精品 | 成人免费视频网 | 免费视频精品一区二区三区 | 中文字幕亚洲一区二区三区 | 久久精品精品 | 国产精品免费视频一区一 | 亚洲国语在线视频手机在线 | 草草在线观看视频 | 亚洲综合欧美综合 | 久久国产成人精品 | 久久无码精品一区二区三区 | 亚洲天堂一区在线 | 国产一区二区免费在线 | 欧美视频一区二区 | 91香蕉视频免费 | 日韩午夜视频在线观看 | 日韩一级影院 | 国产精品久久亚洲一区二区 | 亚洲成a人片在线看 | 美女扒开腿让男人桶 | 国产三级国产精品国产国在线观看 | 久久精品国产第一区二区 | 日韩三级免费观看 | 欧美极品在线视频 | 三级理论手机在线观看视频 | 高清性色生活片欧美在线 | 色屁屁一区二区三区视频国产 | 亚洲精品高清国产一线久久97 | 日韩中文字幕网站 | 国产一国产一有一级毛片 | 日韩第五页 | 纯欧美一级毛片免费 | 欧美成人xxxx |