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 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
使用python遍历指定城市的一周气温
Mar 31 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
Python Json模块中dumps、loads、dump、load函数介绍
May 15 Python
对python条件表达式的四种实现方法小结
Jan 30 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
Feb 22 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
Feb 14 Python
python实现梯度下降和逻辑回归
Mar 24 Python
jupyternotebook 撤销删除的操作方式
Apr 17 Python
Python Excel vlookup函数实现过程解析
Jun 22 Python
python+selenium实现12306模拟登录的步骤
Jan 21 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/11/09 PHP
phpcms手机内容页面添加上一篇和下一篇
2015/06/05 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
javascript prototype 原型链
2009/03/12 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
发布一个基于javascript的动画类 Fx.js
2010/11/05 Javascript
浅谈javascript 函数属性和方法
2015/01/21 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
详解vue 组件注册
2020/11/20 Vue.js
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
详解Python自建logging模块
2018/01/29 Python
python素数筛选法浅析
2018/03/19 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
基于python实现简单日历
2018/07/28 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
美国时尚在线:Showpo
2017/09/08 全球购物
介绍一下Linux中的链接
2016/06/05 面试题
护理专业自荐书
2014/06/04 职场文书
中考标语大全
2014/06/05 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers