《老鸟python 系列》视频上线了,全网稀缺资源,涵盖python人工智能教程,爬虫教程,web教程,数据分析教程以及界面库和服务器教程,以及各个方向的主流实用项目,手把手带你从零开始进阶高手之路!点击 链接 查看详情




再讲动态绑定

阅读:227568870    分享到

Python 是动态语言,我们可以在定义类之后给类动态绑定属性和方法,也可以创建一个类的对象后, 动态给该对象绑定属性和方法,这就是动态语言的灵活性。

前面章节中我们已经学习过如何给类或对象动态的绑定属性和方法,本节我们学习使用 types 模块的 MethodType 对类的方法进行动态绑定。

types 模块的 MethodType 函数

使用 types 模块的 MethodType 函数可以给类的某个对象动态绑定函数,但我们知道给类的某个对象动态绑定函数不会影响另一个对象。

from types import MethodType

class Human(object):
    pass

def printsex(self):
    print(u"女")

ruhua = Human()
zhaoritian = Human()
ruhua.printsex = MethodType(printsex, ruhua)
ruhua.printsex()       # 调用绑定的 printsex 函数
zhaoritian.printsex()  # 错误

如果我们想让动态绑定的函数作用于所有对象,可以直接对类进行动态绑定,比如直接对 Human 类进行动态绑定。

from types import MethodType

class Human(object):
    pass

def printsex(self):
    print(u"女")

ruhua = Human()
zhaoritian = Human()
Human.printsex = MethodType(printsex, Human)
ruhua.printsex()       # 调用绑定的 printsex 函数
zhaoritian.printsex()  # 调用绑定的 printsex 函数

本节重要知识点

会使用 types 的 MethodType 函数。

要知道 types 的 MethodType 函数没法给类或对象动态绑定属性。

作业

想想为什么使用 types 的 MethodType 函数对对象进行动态绑定函数时,被绑定的函数需要 self 参数,而我们前面讲的直接给对象进行动态绑定函数不需要这个参数。

from types import MethodType

class Human(object):
    pass

def printsex(self):  # 需要 self 参数
    print(u"女")

def printage():      # 不需要 self 参数
    print(18)

ruhua = Human()
zhaoritian = Human()
ruhua.printsex = MethodType(printsex, ruhua)
ruhua.printsex()       # 调用绑定的 printsex 函数

ruhua.printage = printage
ruhua.printage()       # 调用绑定的 printage 函数

如果以上内容对您有帮助,请老板用微信扫一下赞赏码,赞赏后加微信号 birdpython 领取免费视频。


登录后评论

user_image
Sophomore
2020年9月20日 22:59 回复

谢谢大神,比核心编程上讲得易懂多啦


user_image
王大喵
2020年5月1日 15:07 回复

博主真用心,这下讲的更透彻了!


user_image
CharlieJiang
2020年1月16日 23:03 回复

NBNB受教了


user_image
hzlzh
2019年6月3日 08:48 回复

学习打卡~


user_image
holic红尘
2019年1月26日 16:51 回复

通俗易懂,感谢