类方法 和 外部方法


  • 类方法:类内部定义的方法
  • 外部方法:定义在类外的方法,可是带上了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

相关文章
相关标签/搜索