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

首頁 > 編程 > Python > 正文

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

2020-02-16 02:10:20
字體:
來源:轉載
供稿:網友

前言

本文主要給大家介紹了關于python用MethodType綁定方法到類的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:

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

問題引出

先看下面一段代碼:

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)#結果都是15

運行這段代碼我們會發現輸出結果都是15,我們明明分別設置了A和B對象的屬性值,為什么,會這樣呢?開始我也有一樣的疑問,后來發現是對MethodType的理解不夠,經過查證,得到如下解釋。

解析

Stu類本身并沒有屬性和方法,所以用這個類創建的實例也沒有屬性和方法。用MethodType將set_age方法綁定到Stu類,并不是將這個方法直接寫到Stu類內部,而是在Stu內存中創建一個link指向外部的方法,在創建Stu實例的時候這個link也會被復制。所以不管創建多少實例,這些實例和Stu類都指向同一個set_age方法。A.set_age(10)并沒有在A這個實例內部創建age屬性,而是將age屬性創建在外部set_age方法的內存區中。因為A和B內部link都指向外部set_age方法的內存區,所以不管A還是B在調用set_age方法的時候改變的是set_age方法內存區里的age屬性,所以A改了B也就改了,如果新建一個實例C在沒有調用set_age方法的前提下也會有age屬性,因為C的link指向的set_age方法的內存區,而set_age之前被A或者B調用過了。

總結

大概意思就是通過這樣綁定的方法設置的屬性有點java中靜態變量的意思

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林站長站的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南靖县| 资阳市| 金堂县| 亚东县| 寻乌县| 益阳市| 德江县| 定兴县| 金平| 绥中县| 博白县| 紫阳县| 巫溪县| 北辰区| 台中县| 榆社县| 漳州市| 察哈| 扎囊县| 邛崃市| 溧阳市| 新邵县| 阳新县| 锡林浩特市| 治多县| 富锦市| 玉林市| 曲麻莱县| 繁峙县| 桦甸市| 漳平市| 凤庆县| 饶河县| 玉环县| 安陆市| 德令哈市| 资兴市| 韶山市| 那曲县| 巴彦淖尔市| 盐津县|