第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的世界。
欢迎大家批评指正,谢谢大家关注!
第7.11节 案例详解:Python类实例变量的更多相关文章
- 第7.20节 案例详解:Python抽象类之真实子类
第7.20节 案例详解:Python抽象类之真实子类 上节介绍了Python抽象基类相关概念,并介绍了抽象基类实现真实子类的步骤和语法,本节结合一个案例进一步详细介绍. 一. 案例说明 本节定义 ...
- 第7.18节 案例详解:Python类中装饰器@staticmethod定义的静态方法
第7.18节 案例详解:Python类中装饰器@staticmethod定义的静态方法 上节介绍了Python中类的静态方法,本节将结合案例详细说明相关内容. 一. 案例说明 本节定义了类Sta ...
- 第7.16节 案例详解:Python中classmethod定义的类方法
第7.16节 案例详解:Python中classmethod定义的类方法 上节介绍了类方法定义的语法以及各种使用的场景,本节结合上节的知识具体举例说明相关内容. 一. 案例说明 本节定义的一个 ...
- 第7.13节 案例详解:Python类变量
第7.13节 案例详解:Python类变量 上节介绍了类变量的定义和使用方法,并举例进行了说明.本节将通过一个更完整的例子来说明. 一. 定义函数dirp def dirp(iter): ret ...
- 第7.9节 案例详解:Python类封装
上节介绍了Python中类的封装机制,本节结合一个具体例子进行详细说明. 我们定义一个Person类,其内部有姓名.年龄和类型三个实例变量,并定义了相关的存取方法: class Person(): ...
- 第7.7节 案例详解:Python类继承机制
本节实现一个类继承的小程序,下面一边结合代码一边介绍相关继承的知识.例子以车.汽车为例,车为父类.汽车为子类. 一. 定义父类Vehicle class Vehicle(): def __ ...
- 《spss统计分析与行业应用案例详解》:实例九 单一样本t检验
单一样本t检验的功能与意义 spss的单一样本t检验过程是瑕设检验中最基本也是最常用的方法之一,跟所有的假没检验一样,其依剧的基木原理也是统计学中的‘小概率反证法”原理.通过单一样本t检验.我们可以实 ...
- 《spss统计分析与行业应用案例详解》:实例十二 卡方检验
卡方检验的功能与意义 SPSS的卡方检验是非参数检验方法的一种,其基本功能足通过样本的 频数分布来推断总体是否服从某种理论分布或某种假设分布,这种检验过程是通过分析实际的频数与理论的频数之间的差别或是 ...
- 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter
上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一. 案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...
随机推荐
- .NET Core 跨平台资源监控库及 dotnet tool 小工具
目录 简介 dotnet tool 体验 CZGL.SystemInfo SystemPlatformInfo ProcessInfo 内存监控 NetworkInfo DiskInfo 简介 CZG ...
- Loadrunner11简单压测接口教程
一.需求 使用Loadrunner压测目标接口,要求支持1000并发数. 目标接口:https://www.xxx.com/digitaldata/api/signer/1.0/signerRegis ...
- CSS ------ 样式学习 (一)
CSS 指层叠样式表 (Cascading Style Sheets) :定义如何显示 HTML 元素(一套自定义的衣服) 语法: 由选择器和声明(可以是一条或多条)构成, 声明以大括号({})括起来 ...
- c#提取
string email = Console.ReadLine(); int atIndex = email.IndexOf('@'); string userName = email.Substri ...
- Metasploitable3学习笔记--永恒之蓝漏洞复现
漏洞描述: Eternalblue通过TCP端口445和139来利用SMBv1和NBT中的远程代码执行漏洞,恶意代码会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不 ...
- 利用sklearn实现k-means
基于上面的一篇博客k-means利用sklearn实现k-means #!/usr/bin/env python # coding: utf-8 # In[1]: import numpy as np ...
- php xml转数组
<?php libxml_disable_entity_loader(true); $notify_values = json_decode(json_encode(simplexml_load ...
- 手写atoi、strcpy、strcat
一:实现atoi函数 1 #include<iostream> 2 3 using namespace std; 4 5 int atoi_my(const char *str) 6 { ...
- rbd的image对象数与能写入文件数的关系
前言 收到一个问题如下: 一个300TB 的RBD,只有7800万的objects,如果存储小文件的话,感觉不够用 对于这个问题,我原来的理解是:对象默认设置的大小是4M一个,存储下去的数据,如果小于 ...
- Linux 中deb文件选择安装路径
deb文件安装后默认目录在/usr**中如果想指定自定义安装目录 选择自定义目录 sudo dpkg -i --instdir=/to/your/customer/path ***.deb 软连接创建 ...