python中类和实例如何绑定属性与方法示例详解


Posted in Python onAugust 18, 2017

前言

python类与实例的方法的调用中觉得云里雾里,思考之后将自己的想法记录下,一来加深自己理解,巩固自己记忆,而来帮助一些想要学习python的朋友理解这门抽象的语言,由于Python是动态语言,类以及根据类创建的实例可以任意绑定属性以及方法,下面分别介绍。

1.类绑定属性

类绑定属性可以直接在class中定义属性,这种属性是类属。

class Student(object):
  name = 'Student'

这个属性虽然归类所有,但类的所有实例都可以访问到。

class Student(object):
 name = 'Student'
s = Student() # 创建实例s
print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
print(Student.name) # 打印类的name属性
Student
Student

此时如果修改s.name的值,会有如下结果:

s.name = 'xiaoming' # 给实例绑定name属性
print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
print(Student.name) # 但是类属性并未消失,用Student.name仍然可以访问
xiaoming
Student

接下来删除s.name属性:

del s.name # 如果删除实例的name属性
print(s.name) # 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了
Student

由此可见相同名称的实例属性将覆盖类属性,删除实例属性后,实例将向上访问到类属性。

2.实例绑定属性

实例绑定属性的方法有两种,一是通过类的self变量,二是直接给实例赋值。

class Student(object):
 def __init__(self, name):
  self.name = name
s = Student('Bob')#方法一 通过类的self变量绑定属性
s.score = 90#方法二 直接赋值

3.类绑定方法

类绑定方法分两种,第一种形如类绑定属性,例程如下:

Class Student(object):
 pass
a=Student()#创建实例

def set_score(self,score):
 self.score=score

Student.set_score=set_score#类绑定方法
a.set_score(99)#调用方法
a.score
99#输出

第二种是使用MethodType给类绑定方法:

Class Student(object):
 pass
a=Student()#创建实例

def set_score(self,score):
 self.score=score

from types import MethodType
Student.set_score = MethodType(set_score, Student)

a.set_score(99)#调用方法
a.score
99#输出

这种方法有一个需要注意的地方,如果继续创建一个实例b:

b=Student()
b.set_score(60)
b.score
a.score
60

会发现a的属性score值也变成60。这里个人的理解是这里的score并不是同上一种方法一样直接绑定在类,而是类似于像列表一样的共享引用的关系,

即实例a和b都引用这个score作为自己的属性,而当其被修改时,所有引用它的实例的对应属性都将一同发生变化。

4.实例绑定方法

第一种通过给类绑定方法,可以使实例调用,如上所示。

第二种是使用MethodType给单个实例绑定方法。

Class Student(object):
 pass
a=Student()#创建实例

def set_score(self,score):
 self.score=score

from types import MethodType
a.set_score = MethodType(set_score, a)

a.set_score(99)#调用方法
a.score
99#输出

注意这种方式只对实例a起作用,如果需要类Studnet的所有实例均可调用,那么直接给类Student绑定方法即可。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
跟老齐学Python之有容乃大的list(3)
Sep 15 Python
python对url格式解析的方法
May 13 Python
Python监控主机是否存活并以邮件报警
Sep 22 Python
玩转python爬虫之爬取糗事百科段子
Feb 17 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
Jun 14 Python
Python线程下使用锁的技巧分享
Sep 13 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
Dec 01 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
Jan 08 Python
详解Python openpyxl库的基本应用
Feb 26 Python
关于Numpy之repeat、tile的用法总结
Jun 02 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
Aug 18 #Python
对python中return和print的一些理解
Aug 18 #Python
浅析Python中return和finally共同挖的坑
Aug 18 #Python
Python多进程multiprocessing用法实例分析
Aug 18 #Python
利用python求相邻数的方法示例
Aug 18 #Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
Aug 18 #Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 #Python
You might like
php输出表格的实现代码(修正版)
2010/12/29 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
php方法调用模式与函数调用模式简例
2011/09/20 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
学习js所必须要知道的一些
2007/03/07 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
jqPlot jQuery绘图插件的使用
2016/06/18 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
python中的decorator的作用详解
2018/07/26 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
美国健康和保健平台:healtop
2020/07/02 全球购物
出纳员的岗位职责
2014/02/22 职场文书
初三毕业评语
2014/12/26 职场文书
维稳工作承诺书
2015/01/20 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书