python类的方法属性与方法属性的动态绑定代码详解


Posted in Python onDecember 27, 2017

动态语言与静态语言有很多不同,最大的特性之一就是可以实现动态的对类和实例进行修改,在Python中,我们创建了一个类后可以对实例和类绑定心的方法或者属性,实现动态绑定。

最近在学习python,纯粹是自己的兴趣爱好,然而并没有系统地看python编程书籍,觉得上面描述过于繁琐,在网站找了一些学习的网站,发现廖雪峰老师的网站上面的学习资源很不错,而且言简意赅,提取了一些python中的重要的语法和案例。重要的是可以在线测试python的运行代码,缺点就是没有系统的看python的书籍,不能及时的将知识的碎片化联系在一起,这也是看书与不看书的区别。尤其是在python类与实例的方法的调用中觉得云里雾里,思考之后将自己的想法记录下,一来加深自己理解,巩固自己记忆,而来帮助一些想要学习python的朋友理解这门抽象的语言,理解不当之处,希望大家给予指正,谢谢。

1、python中的类与实例

先定义一个类

class Student(object):

初始化,将一些必要属性绑定到Student类中

def __init__(self, name, score):
    self.name = name
    self.score = score

在内部定义一个函数,实现对传入实例的属性操作,将数据进行封装在内部,这些封装的数据本身适合类进行关联的,称之为类的方法。

def print_score(self):
    print('%s: %s' % (self.name, self.score))

2、对实例拥有的属性与方法的调用

传入一个实例

bart = Student('Bart Simpson', 59)

对属性的调用

>>> bart.name
'Bart Simpson'

对方法的调用

>>> bart.print_score()
Bart Simpson: 59

都没有问题,以下来理解python中实例中属性与方法的绑定

3、python中实例属性与方法绑定

先定义一个类

class Student(object):
  pass

传入一个实例

s = Student()

动态给实例绑定一个属性

s.name = 'Michael'

接下来给实例绑定方法

先定义一个函数

def set_age(self, age): # 定义一个函数作为实例方法
  self.age = age

对实例的方法绑定

from types import MethodType
s.set_age = MethodType(set_age, s) # 给实例绑定一个方法
s.set_age(25) # 调用实例方法
>>> s.age # 测试结果
25

对类的方法绑定

def set_score(self, score):#定义一个函数作为类的方法
   self.score = score

 Student.set_score = set_score#绑定方法

廖老师在后面补充了一句:set_score方法可以直接定义在class中,但动态绑定允许我们在程序运行的过程中动态给class加上功能,这在静态语言中很难实现。

我理解的意思是,一般的对于定义一个类,会在类进行初始化的时候进行属性的绑定,传入实例的时候直接传入带参数的实例,通过内部定义的一些方法,就直接可以对实例的属性和实例继承于类的方法进行数据操作,引用,例如xxx.namexxx.print_name的形式。但是如果定义的类没有初始化,基于python语言良好的动态绑定的属性,我们可以对传入的实例进行实例和方法的绑定,对属性的绑定比较简单,对方法的绑定需要通过fromtypesimportMethodType的形式,(其他的形式暂时还不知道),告诉解释器s.set_age的方法操作是将set_age函数绑定s即s.set_age=MethodType(set_age,s),这样python就知道怎样执行s的set_age方法。但是这样绑定方法只能对类中的绑定的方法实例起效,要想对类中所有实例生效需要动态的对类进行方法的绑定。就像我们上面看到的一样。绑定之后,接下来就直接可以类似于xxx.namexxx.print_name的形式进行调用了。

对于方法是否能够直接调用,在于定义的函数是否在类中的定义还是基于函数的定义,对于不在类中定义的函数,实现对实例的方法操作就需要进行动态的绑定,或者对实例所属的类进行方法绑定;而在类中定义的函数即方法,在实例中可以直接进行调用。

总结

以上就是本文关于python类的方法属性与方法属性的动态绑定代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python判断直线和矩形是否相交的方法
Jul 14 Python
Python 模板引擎的注入问题分析
Jan 01 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 Python
Python通过递归获取目录下指定文件代码实例
Nov 07 Python
python range实例用法分享
Feb 06 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
Feb 21 Python
python等差数列求和公式前 100 项的和实例
Feb 25 Python
python对指定字符串逆序的6种方法(小结)
Apr 02 Python
Python3.7 读取音频根据文件名生成脚本的代码
Apr 07 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
Jun 12 Python
python中的迭代和可迭代对象代码示例
Dec 27 #Python
python并发编程之线程实例解析
Dec 27 #Python
Python实现连接postgresql数据库的方法分析
Dec 27 #Python
Python机器学习之SVM支持向量机
Dec 27 #Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 #Python
手把手教你python实现SVM算法
Dec 27 #Python
Python中使用支持向量机SVM实践
Dec 27 #Python
You might like
Protoss建筑一览
2020/03/14 星际争霸
一个用于网络的工具函数库
2006/10/09 PHP
关于JSON以及JSON在PHP中的应用技巧
2013/11/27 PHP
php树型类实例
2014/12/05 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
PHP类的特性实例分析
2016/09/28 PHP
jQuery学习3:操作元素属性和特性
2010/02/07 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
Jquery EasyUI Datagrid右键菜单实现方法
2016/12/30 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
分析python服务器拒绝服务攻击代码
2014/01/16 Python
python求列表交集的方法汇总
2014/11/10 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
python进行TCP端口扫描的实现
2018/12/21 Python
python导入坐标点的具体操作
2019/05/10 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
关于孝道的演讲稿
2014/05/21 职场文书
初中同学会致辞
2015/08/01 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android