第7.11节 案例详解:Python类实例变量
上节老猿介绍了实例变量的访问方法,本节结合一个具体案例详细介绍实例变量访问。
本节定义一个Vehicle类(车),它有三个实例变量self.wheelcount(轮子数)、self.power(动力)、self.totaldistance(累计行驶里程),但在构造方法内只定义了前2个,第3个在其他实例方法中访问。一、类定义
class Vehicle():
def __init__(self,wheelcount, power):
self.wheelcount,self.power = wheelcount,power
#构造方法只定义了self.wheelcount,self.power两个实例变量。
def drive(self,distance):
try:self.totaldistance += distance
except: self.totaldistance = distance
#drive方法中要根据一次行驶距离计算总行驶里程,但self.totaldistance没有在构造方法定义,因此在drive方法内采用了一个异常处理,确保该实例变量未定义时会执行定义,当然在构造函数内初始化定义该变量是最好的。
def gettotaldistance(self):
if not hasattr(self,'totaldistance'): self.totaldistance=0;
return self.totaldistance
#类似drive方法,在gettotaldistance内判断实例是否有'totaldistance'存在,以便对一个未定义的实例变量进行初始化防止程序出错
二、实例化对象及实例变量的访问
我们定义两个实例对象马车和汽车:
hippomobile = Vehicle(2,'马')
car=Vehicle(4,'汽油发动机')
为了方便观察对象的属性,我们定义一个函数dirp取代dir,该函数是将dir返回的带两个下划线开头的属性和方法剔除,因为带两个下划线的属性和方法要么是私有的(双下划线开头,不是双下划线结尾),要么是特殊变量(特殊变量必须以双下划线开头和结尾),特殊变量是可以直接访问的,但因为从Object类继承过来的特殊属性太多,不利于观察自己定义属性,因此剔除:
def dirp(iter): return [i for i in dir(iter) if not i.startswith('__')]
我们用dirp观察hippomobile、car这2个对象的属性和方法,他们都有:
['drive', 'gettotaldistance', 'power', 'wheelcount']
此时执行:
car.oil=0
truck=(4,'汽油发动机')
再用dirp观察,会发现hippomobile保持不变,car多出了一个oil属性,truck的属性与hippomobile一样,可见实例增加的属性对存量对象和新定义的实例对象都不会影响,只影响该实例自身。
我们再执行:truck.drive(100),再用dirp观察,发现truck对象多了一个'totaldistance'属性,而其他对象都没有,可见这个属性是执行方法后变量赋值之后才存在,并不是实例定义之后就存在,如果要变量定义就存在,就需要在构造方法进行初始化。
通过上面案例的说明,实例属性是必须执行赋值语句之后才存在,该赋值语句要么就是实例方法中(不一定是构造方法)的代码,要么就是类体外面的访问实例的代码。
本节老猿介绍了实例变量赋值的方法,并给出了相关案例,内容比较重要但容易理解,请大家结合案例好好理解。
老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!
相关文章
- Python中面向对象和类
- python内置模块之unittest测试(五)
- python开发milvus2.0.2开发,快速上手,参考文档、手册、案例
- Google Earth Engine(GEE)——Python Landsat5/7/8合并、链接和属性统计(NBR案例分析)
- Google Earth Engine(GEE)——Python干旱严重程度案例分析
- python能有前途吗?有何发展前景,有哪些优势?
- python中gzip库用法详解(压缩和解压缩)
- 154 python网络编程 - TCP案例(模拟QQ聊天)
- 81 python - 打飞机案例(源码)
- 77 python - 打飞机案例(优化代码)
- 72 python - 打飞机案例(检测键盘)
- gyp ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- Python 类方法综合案例
- Python使用face_recognition库实现人脸识别案例
- 《像计算机科学家一样思考Python》——第4章 案例研究:接口设计 4.1 乌龟世界
- 基于Python实现数字图像处理(图像去雾)【100010439】
- Python基础必掌握的正则表达式功能标志用法详解
- Python 数据教程之如何将行转位列、删除指定行、合并多个表(列不一样)
- Python 代码库之URL字符串最后一项内容(含demo源码)
- Python数据库连接池 -组件 DBUtils
- python之importlib的使用
- Python学习---Django重点之静态资源配置
- 软件测试案例|Python+Selenium+unittest完成对登录页面的自动化测试
- 机器学习完整过程案例分布解析,python代码解析
- Python 基础 之 多任务 Process 进程应用的简单案例,简单实现文件夹文件拷贝(进程池,进程池队列等)
- Python——pyecharts数据可视化
- python第十四课--排序及自定义函数之自定义函数(案例一)
- python第十四课--排序及自定义函数之案例一:选择排序
- Python数据类型