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抓取行政区划码的方法
Nov 28 Python
Python实现多线程的两种方式分析
Aug 29 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
浅谈pycharm的xmx和xms设置方法
Dec 03 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 Python
python的pstuil模块使用方法总结
Jul 26 Python
python双向链表原理与实现方法详解
Dec 03 Python
py-charm延长试用期限实例
Dec 22 Python
python实现人脸签到系统
Apr 13 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
Apr 14 Python
python如何删除列为空的行
Jul 17 Python
超详细Python解释器新手安装教程
May 10 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 !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
JavaScript中的闭包
2016/02/24 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
Python3.x和Python2.x的区别介绍
2013/02/12 Python
python使用自定义user-agent抓取网页的方法
2015/04/15 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
python生成器用法实例详解
2019/11/22 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
英语专业学子个人的自我评价
2013/10/02 职场文书
建材投资建议书
2014/05/16 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
党员个人总结范文
2015/02/14 职场文书
投资合作意向书范本
2015/05/08 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python