類方法 和 外部方法


  • 類方法:類內部定義的方法
  • 外部方法:定義在類外的方法,可是帶上了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給類一個實例綁定外部方法。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

相關文章
相關標籤/搜索