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中的字符串类型基本知识学习教程
Feb 04 Python
JPype实现在python中调用JAVA的实例
Jul 19 Python
Python3.5 Pandas模块之Series用法实例分析
Apr 23 Python
聊聊python里如何用Borg pattern实现的单例模式
Jun 06 Python
解决python super()调用多重继承函数的问题
Jun 26 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
Python requests及aiohttp速度对比代码实例
Jul 16 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
详解Python遍历列表时删除元素的正确做法
Jan 07 Python
使用Python封装excel操作指南
Jan 29 Python
详解Django中的FBV和CBV对比分析
Mar 01 Python
python源码剖析之PyObject详解
May 18 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学习教程之第2天
2008/06/15 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
PHP入门经历和学习过程分享
2014/04/11 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
PHP实现在线阅读PDF文件的方法
2015/06/17 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
python 将日期戳(五位数时间)转换为标准时间
2019/07/11 Python
解决python 上传图片限制格式问题
2019/10/30 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
python 爬取古诗文存入mysql数据库的方法
2020/01/08 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
Python几种常见算法汇总
2020/06/02 Python
师范院校学生自荐信范文
2013/12/27 职场文书
学生会主席就职演讲稿
2014/01/14 职场文书
无故旷工检讨书
2014/01/26 职场文书
高三政治教学反思
2014/02/06 职场文书
门卫岗位职责说明书
2014/08/18 职场文书
毕业证委托书范文
2014/09/26 职场文书
信访工作汇报材料
2014/10/27 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
浅谈如何提高PHP代码的质量
2021/05/28 PHP