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 相关文章推荐
Windows和Linux下使用Python访问SqlServer的方法介绍
Mar 10 Python
Python获取任意xml节点值的方法
May 05 Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 Python
python定时器(Timer)用法简单实例
Jun 04 Python
Python+django实现简单的文件上传
Aug 17 Python
Python最小二乘法矩阵
Jan 02 Python
python写程序统计词频的方法
Jul 29 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
Django框架创建项目的方法入门教程
Nov 04 Python
python内打印变量之%和f的实例
Feb 19 Python
Python命名空间namespace及作用域原理解析
Jun 05 Python
利用Python批量识别电子账单数据的方法
Feb 08 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
图形数字验证代码
2006/10/09 PHP
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
php使用反射插入对象示例分享
2014/03/11 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
2017/07/05 Javascript
利用canvas实现的加载动画效果实例代码
2017/07/05 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
Django实现跨域的2种方法
2019/07/31 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
网络工程师专家职业发展路线
2014/02/14 职场文书
员工入职担保书范文
2014/04/01 职场文书
公司募捐倡议书
2014/05/14 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
蓬莱阁导游词
2015/02/04 职场文书
教师自荐信范文
2015/03/06 职场文书
英文自荐信范文
2015/03/25 职场文书
电影地道战观后感
2015/06/04 职场文书