动态绑定允许我们在程序运行的过程中动态给class加上功能,这在静态语言中很难实现
https://www.liaoxuefeng.com/wiki/
# 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法, # 这就是动态语言的灵活性。先定义class class Student(object): pass s = Student() # 动态给实例绑定一个属性 s.name = 'Kate' def set_age(self,age): self.age = age from types import MethodType s.set_age = MethodType(set_age,s) s.set_age(25)
from types import MethodType # 定义一个函数作为实例方法 def set_get_diff_page_xpath_res(self, func): self.xpath_res = func # 兼容不同页面xpath的类 class spider_diff_page(object): pass instance_page_res = spider_diff_page() # 给实例绑定一个处理不同页面xpath的方法 instance_page_res.xpath_res = MethodType(set_get_diff_page_xpath_res, instance_page_res) def deal_diff_page(page): return '%s%s' % (page, 'ZEBRA-TEACHER') page = 'amazon.uk' instance_page_res.xpath_res(deal_diff_page(page))