類方法 和 外部方法


  • 類方法:類內部定義的方法
  • 外部方法:定義在類外的方法,但是帶上了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...
點個贊再走吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章