- 類方法:類內部定義的方法
- 外部方法:定義在類外的方法,但是帶上了self參數。
居於動態語言的靈活性,我們知道可以動態的給實例綁定屬性,那是否可以給實例綁定一個方法,成爲實例方法。
例如:
class Student(object):
pass
>>>s = Student()
>>>s.name = 'xlp' # 動態語言的靈活性:動態給實例綁定一個屬性
def set_age(self,age) # 定義一個外部方法:set_age(),不是class裏的
self.age = age
可以創建一個鏈接把外部的set_age()方法鏈接到Student內。
具體做法是:通過MethodType
給類一個實例綁定外部方法。
from types import MethodType # ##????
s.set_age = MethodType (set_age,s) # 給實例綁定一個方法
s.set_age(24) # 調用實例方法
s.age #測試結果
24
但是該方法對除開實例s,對其他實例是不起作用的。
例如:
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'
若要給類的所有實例綁定外部方法,則需要給類動態綁定該方法。
>>>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()。
通常,上面的set_score()方法一般直接定義在class中,但動態綁定允許我們在程序運行的過程中動態地給class加上功能。
❤ thanks for watching, keep on updating...
點個贊再走吧