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 相关文章推荐
py中的目录与文件判别代码
Jul 16 Python
Python实现的数据结构与算法之双端队列详解
Apr 22 Python
python实现类的静态变量用法实例
May 08 Python
Django入门使用示例
Dec 12 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
用python写扫雷游戏实例代码分享
May 27 Python
numpy使用fromstring创建矩阵的实例
Jun 15 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
Oct 29 Python
详解python解压压缩包的五种方法
Jul 05 Python
在Tensorflow中查看权重的实现
Jan 24 Python
python2 对excel表格操作完整示例
Feb 23 Python
使用OpenCV实现道路车辆计数的使用方法
Jul 15 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技巧与注意事项分析
2011/02/03 PHP
Memcached常用命令以及使用说明详解
2013/06/27 PHP
php下拉选项的批量操作的实现代码
2013/10/14 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
wxPython中文教程入门实例
2014/06/09 Python
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
python 调用HBase的简单实例
2016/12/18 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
python range实例用法分享
2020/02/06 Python
python字符串替换re.sub()实例解析
2020/02/09 Python
解决python 找不到module的问题
2020/02/12 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
换届选举主持词
2015/07/03 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
vue中data里面的数据相互使用方式
2022/06/05 Vue.js