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获取标准北京时间的方法
Mar 24 Python
Python基于pygame实现图片代替鼠标移动效果
Nov 11 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 Python
python2.7和NLTK安装详细教程
Sep 19 Python
python仿evething的文件搜索器实例代码
May 13 Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 Python
python openCV获取人脸部分并存储功能
Aug 28 Python
Python从文件中读取指定的行以及在文件指定位置写入
Sep 06 Python
Python上下文管理器用法及实例解析
Nov 11 Python
python wxpython 实现界面跳转功能
Dec 17 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
Mar 04 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
php2html php生成静态页函数
2008/12/08 PHP
PHP 命令行参数详解及应用
2011/05/18 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
2019/09/14 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
python实现在目录中查找指定文件的方法
2014/11/11 Python
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
详解python3中zipfile模块用法
2018/06/18 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
在python中pandas的series合并方法
2018/11/12 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
python 读取、写入txt文件的示例
2020/09/27 Python
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
公务员年度个人总结
2015/02/12 职场文书
医生个人年度总结
2015/02/28 职场文书
长江七号观后感
2015/06/11 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
Elasticsearch 聚合查询和排序
2022/04/19 Python
一文解答什么是MySQL的回表
2022/08/05 MySQL