动态绑定允许我们在程序运行的过程中动态给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))

 

posted @ 2017-11-16 20:58  papering  阅读(254)  评论(0编辑  收藏  举报