居於動態語言的靈活性,咱們知道能夠動態的給實例綁定屬性,那是否能夠給實例綁定一個方法,成爲實例方法。
例如:測試
class Student(object): pass >>>s = Student() >>>s.name = 'xlp' # 動態語言的靈活性:動態給實例綁定一個屬性 def set_age(self,age) # 定義一個外部方法:set_age(),不是class裏的 self.age = age
能夠建立一個連接把外部的set_age()方法連接到Student內。
具體作法是:經過MethodType
給類一個實例綁定外部方法。code
from types import MethodType # ##???? s.set_age = MethodType (set_age,s) # 給實例綁定一個方法 s.set_age(24) # 調用實例方法 s.age #測試結果 24
可是該方法對除開實例s,對其餘實例是不起做用的。
例如:ast
s2 = Student() # 建立新的實例 s2.set_age(25) # 嘗試調用該方法 # 報錯 #Traceback (most recent call last): # File "<stdin>", line 1, in <module> #AttributeError: 'Student' object has no attribute 'set_age'
若要給類的全部實例綁定外部方法,則須要給類動態綁定該方法。class
>>>def set_score(self,score): self.score = score >>>Student.set_score = set_score # 直接用類來建立一個方法 >>> s.set_score(100) >>> s.score 100 >>> s2.set_score(59) >>> s2.score 59
此時實例和類都指向同一個set_score()。import
一般,上面的set_score()方法通常直接定義在class中,但動態綁定容許咱們在程序運行的過程當中動態地給class加上功能。module
❤ thanks for watching, keep on updating...
點個贊再走吧object