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数据结构之翻转链表
Feb 25 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
Aug 08 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
python虚拟环境virtualenv的安装与使用
Sep 21 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 Python
Python SQL查询并生成json文件操作示例
Aug 17 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
Aug 12 Python
详解用python计算阶乘的几种方法
Aug 14 Python
使用Python生成200个激活码的实现方法
Nov 22 Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 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
PHP Pear 安装及使用
2009/03/19 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
jquery实现翻动fadeIn显示的方法
2015/03/05 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
python实现电子产品商店
2019/02/26 Python
Python发展简史 Python来历
2019/05/14 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
Python图像处理库PIL的ImageFont模块使用介绍
2020/02/26 Python
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
幼儿园毕业园长感言
2014/02/24 职场文书
优秀护士先进事迹
2014/05/08 职场文书
学校端午节活动方案
2014/08/23 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
2016小学新学期寄语
2015/12/04 职场文书
创业计划书之废品回收
2019/09/26 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
python lambda 表达式形式分析
2022/04/03 Python