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编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
使用pandas read_table读取csv文件的方法
Jul 04 Python
浅谈Python 多进程默认不能共享全局变量的问题
Jan 11 Python
python爬取cnvd漏洞库信息的实例
Feb 14 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
Python线程threading模块用法详解
Feb 26 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
python实现音乐播放和下载小程序功能
Apr 26 Python
python中delattr删除对象方法的代码分析
Dec 15 Python
pycharm 如何取消连按两下shift出现的全局搜索
Jan 15 Python
python实现控制台输出颜色
Mar 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
php4的彩蛋
2006/10/09 PHP
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
MySQL数据源表结构图示
2008/06/05 PHP
php数字游戏 计算24算法
2012/06/10 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python中使用Inotify监控文件实例
2015/02/14 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
Python实现的购物车功能示例
2018/02/11 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
小学生寒假家长评语
2014/04/16 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
网络妈妈观后感
2015/06/08 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
MySQL 数据类型选择原则
2021/05/27 MySQL
MySQL索引失效的典型案例
2021/06/05 MySQL
Python 可迭代对象 iterable的具体使用
2021/08/07 Python