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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python动态绑定属性和方法

發(fā)布時(shí)間:2025/3/20 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python动态绑定属性和方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

當(dāng)我們定義了一個(gè) class,創(chuàng)建了一個(gè) class 的實(shí)例后,我們可以給該實(shí)例綁定任何屬性和方法,也可以給類綁定任何屬性和方法,這就是動(dòng)態(tài)語言的靈活性。

給實(shí)例綁定屬性和方法,每個(gè)實(shí)例之間新增的部分是互不干擾的。

1. 先來看一個(gè)方法:MethodType

如果我們在模塊中定義一個(gè)方法,而不是在類中定義一個(gè)方法,那么此時(shí)這個(gè)方法并不是對象的實(shí)例方法,但是我們可以將這個(gè)方法作為屬性賦值給對象的

某一個(gè)屬性。比如下面這樣:

class Student(object):def __init___(self, name, age):self.name = nameself.age = age# 需要被綁定的方法 def run(self):print("this is run method ", self)stu = Student() stu.run = run stu.run("xxxxxx") # this is run method xxxxxx

當(dāng)我們定義一個(gè) class 的時(shí)候可以給這個(gè)類定義實(shí)例屬性和實(shí)例方法,實(shí)例方法的特點(diǎn):當(dāng)實(shí)例方法被調(diào)用的時(shí)候Python對象會自動(dòng)作為self參數(shù)傳入

到方法的內(nèi)部。但是在調(diào)用 run 方法的時(shí)候 stu 對象不會作為 self 參數(shù)傳遞到 run 方法內(nèi)部,就好像是 staticmethod 方法一樣。MethodType 可以解決

這個(gè)問題,這個(gè)方法可以讓一個(gè)模塊方法在被調(diào)用的時(shí)候自動(dòng)傳入調(diào)用對象作為 self 參數(shù)。語法如下:

anotherRef = types.MethodType(methodName, instance/className)

于是上面的代碼可以這樣改:

''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' from types import MethodTypeclass Student(object):def __init___(self, name, age):self.name = nameself.age = age# 需要被綁定的方法 def run(self):print("this is run method ", self)stu = Student() stu.run = MethodType(run, stu) stu.run() # this is run method <__main__.Student object at 0x000001B453CEF370>

2. 下面我們來介紹下如何動(dòng)態(tài)綁定

1) 綁定方法到實(shí)例中

from types import MethodTypeclass Student(object):passdef set_age(self, age):self.age = agestu1 = Student() stu2 = Student()stu1.set_age = MethodType(set_age, stu1) stu2.set_age = MethodType(set_age, stu2) stu1.set_age(22) stu2.set_age(44) print(stu1.age) # 22 print(stu2.age) # 44

2)綁定方法到類上

用 MethodType 將方法綁定到類,并不是將這個(gè)方法直接寫到類內(nèi)部,而是在內(nèi)存中創(chuàng)建一個(gè)link指向外部的方法,在創(chuàng)建實(shí)例的時(shí)候這個(gè)link也會被復(fù)制。

''' 遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' from types import MethodTypeclass Student (object):passdef set_age(self, age):self.age = ageStudent.set_age = MethodType(set_age, Student) stu1 = Student() stu2 = Student()stu1.set_age(23) stu2.set_age(99) print(stu1.age) # 99 print(stu2.age) # 99 print(id(stu1.set_age), id(stu2.set_age)) # 3022011453632 3022011453632 print(id(stu1.age), id(stu2.age)) # 140718085415648 140718085415648

為什么 stu1,stu2 都顯示的 99 呢?,因?yàn)?stu1 和 stu2 都指向了相同的 set_age 和 age 地址。

總結(jié)

以上是生活随笔為你收集整理的Python动态绑定属性和方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。