侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python中类和实例如何绑定属性与方法示例详解

Python  /  管理员 发布于 7年前   361

前言

python类与实例的方法的调用中觉得云里雾里,思考之后将自己的想法记录下,一来加深自己理解,巩固自己记忆,而来帮助一些想要学习python的朋友理解这门抽象的语言,由于Python是动态语言,类以及根据类创建的实例可以任意绑定属性以及方法,下面分别介绍。

1.类绑定属性

类绑定属性可以直接在class中定义属性,这种属性是类属。

 class Student(object):  name = 'Student'

这个属性虽然归类所有,但类的所有实例都可以访问到。

class Student(object): name = 'Student's = Student() # 创建实例sprint(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性print(Student.name) # 打印类的name属性StudentStudent

此时如果修改s.name的值,会有如下结果:

s.name = 'xiaoming' # 给实例绑定name属性print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性print(Student.name) # 但是类属性并未消失,用Student.name仍然可以访问xiaomingStudent

接下来删除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 = names = Student('Bob')#方法一 通过类的self变量绑定属性s.score = 90#方法二 直接赋值

3.类绑定方法

类绑定方法分两种,第一种形如类绑定属性,例程如下:

Class Student(object): passa=Student()#创建实例def set_score(self,score): self.score=scoreStudent.set_score=set_score#类绑定方法a.set_score(99)#调用方法a.score99#输出

第二种是使用MethodType给类绑定方法:

Class Student(object): passa=Student()#创建实例def set_score(self,score): self.score=scorefrom types import MethodTypeStudent.set_score = MethodType(set_score, Student)a.set_score(99)#调用方法a.score99#输出

这种方法有一个需要注意的地方,如果继续创建一个实例b:

b=Student()b.set_score(60)b.scorea.score60

会发现a的属性score值也变成60。这里个人的理解是这里的score并不是同上一种方法一样直接绑定在类,而是类似于像列表一样的共享引用的关系,

即实例a和b都引用这个score作为自己的属性,而当其被修改时,所有引用它的实例的对应属性都将一同发生变化。

4.实例绑定方法

第一种通过给类绑定方法,可以使实例调用,如上所示。

第二种是使用MethodType给单个实例绑定方法。

Class Student(object): passa=Student()#创建实例def set_score(self,score): self.score=scorefrom types import MethodTypea.set_score = MethodType(set_score, a)a.set_score(99)#调用方法a.score99#输出

注意这种方式只对实例a起作用,如果需要类Studnet的所有实例均可调用,那么直接给类Student绑定方法即可。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家的支持。


  • 上一条:
    Python设计实现的计算器功能完整实例
    下一条:
    利用Python爬取微博数据生成词云图片实例代码
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客