国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

python利用MethodType綁定方法到類示例代碼

2020-01-04 16:49:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

本文主要給大家介紹了關(guān)于python/199472.html">python用MethodType綁定方法到類的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹:

對(duì)python中MethodType不熟悉的朋友們可以先看看這篇文章

問(wèn)題引出

先看下面一段代碼:

from types import MethodType def set_age(self,age):  self.age=age class Stu(object):  pass Stu.set_age=MethodType(set_age,Stu) A=Stu() B=Stu() A.set_age(10) B.set_age(15) print(A.age,B.age)#結(jié)果都是15

運(yùn)行這段代碼我們會(huì)發(fā)現(xiàn)輸出結(jié)果都是15,我們明明分別設(shè)置了A和B對(duì)象的屬性值,為什么,會(huì)這樣呢?開(kāi)始我也有一樣的疑問(wèn),后來(lái)發(fā)現(xiàn)是對(duì)MethodType的理解不夠,經(jīng)過(guò)查證,得到如下解釋。

解析

Stu類本身并沒(méi)有屬性和方法,所以用這個(gè)類創(chuàng)建的實(shí)例也沒(méi)有屬性和方法。用MethodType將set_age方法綁定到Stu類,并不是將這個(gè)方法直接寫(xiě)到Stu類內(nèi)部,而是在Stu內(nèi)存中創(chuàng)建一個(gè)link指向外部的方法,在創(chuàng)建Stu實(shí)例的時(shí)候這個(gè)link也會(huì)被復(fù)制。所以不管創(chuàng)建多少實(shí)例,這些實(shí)例和Stu類都指向同一個(gè)set_age方法。A.set_age(10)并沒(méi)有在A這個(gè)實(shí)例內(nèi)部創(chuàng)建age屬性,而是將age屬性創(chuàng)建在外部set_age方法的內(nèi)存區(qū)中。因?yàn)锳和B內(nèi)部link都指向外部set_age方法的內(nèi)存區(qū),所以不管A還是B在調(diào)用set_age方法的時(shí)候改變的是set_age方法內(nèi)存區(qū)里的age屬性,所以A改了B也就改了,如果新建一個(gè)實(shí)例C在沒(méi)有調(diào)用set_age方法的前提下也會(huì)有age屬性,因?yàn)镃的link指向的set_age方法的內(nèi)存區(qū),而set_age之前被A或者B調(diào)用過(guò)了。

總結(jié)

大概意思就是通過(guò)這樣綁定的方法設(shè)置的屬性有點(diǎn)java中靜態(tài)變量的意思

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 敖汉旗| 田东县| 灌阳县| 张家界市| 西青区| 蕉岭县| 沁阳市| 长汀县| 本溪市| 南木林县| 巧家县| 辰溪县| 额济纳旗| 布拖县| 大庆市| 金华市| 绥德县| 绥阳县| 道真| 祁连县| 信丰县| 花垣县| 苍南县| 明溪县| 绥芬河市| 灵石县| 科技| 九龙县| 漯河市| 新巴尔虎右旗| 周宁县| 大同县| 雷波县| 疏附县| 平凉市| 胶州市| 东乌珠穆沁旗| 新宾| 大冶市| 鲁甸县| 华宁县|