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和pyqt实现360的CLable控件
Feb 21 Python
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
Python爬虫模拟登录带验证码网站
Jan 22 Python
python如何实现内容写在图片上
Mar 23 Python
Python requests库用法实例详解
Aug 14 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
Python 使用多属性来进行排序
Sep 01 Python
使用Python的networkx绘制精美网络图教程
Nov 21 Python
python实现ssh及sftp功能(实例代码)
Mar 16 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
python Canny边缘检测算法的实现
Apr 24 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 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+Ajax实时自动检测是否联网的方法
2015/07/01 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
jquery对table中各数据的增加、保存、删除操作示例
2014/05/14 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
Python中实现对list做减法操作介绍
2015/01/09 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
python scatter函数用法实例详解
2020/02/11 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
python实现自动清理重复文件
2020/08/24 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
知识竞赛主持词
2014/03/26 职场文书
政治学求职信
2014/06/03 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
出国留学自荐信模板
2015/03/06 职场文书
2016春节慰问信范文
2015/03/25 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书
五一晚会主持词
2015/07/01 职场文书
JS数组的常用方法整理
2021/03/31 Javascript
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
nginx 配置指令之location使用详解
2022/05/25 Servers