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 def函数的定义、使用及参数传递实现代码
Aug 10 Python
python操作gmail实例
Jan 14 Python
Python之str操作方法(详解)
Jun 19 Python
Python基于递归算法实现的走迷宫问题
Aug 04 Python
Django压缩静态文件的实现方法详析
Aug 26 Python
python实现小球弹跳效果
May 10 Python
pandas 数据结构之Series的使用方法
Jun 21 Python
Python 等分切分数据及规则命名的实例代码
Aug 16 Python
基于python实现破解滑动验证码过程解析
May 28 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
Aug 31 Python
Python各协议下socket黏包问题原理
Apr 12 Python
Python实现聚类K-means算法详解
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微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
flash javascript之间的通讯方法小结
2008/12/20 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
jQuery无刷新上传之uploadify3.1简单使用
2016/06/18 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
angularjs自定义过滤器demo示例
2019/08/24 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
Python探索之自定义实现线程池
2017/10/27 Python
python让列表倒序输出的实例
2018/06/25 Python
python实现飞机大战
2018/09/11 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
Python实现AI换脸功能
2020/04/10 Python
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
英国钻石公司:British Diamond Company
2020/02/16 全球购物
销售工作人员的自我评价分享
2013/11/10 职场文书
高分子材料与工程专业个人求职信
2013/12/15 职场文书
学校万圣节活动方案
2014/02/13 职场文书
珍惜水资源建议书
2014/03/12 职场文书
大学第二课堂活动总结
2014/07/08 职场文书
创新社会管理心得体会
2014/09/12 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang