Python 学习笔记14 类 - 使用类和实例
当我们熟悉和掌握了怎么样创建类和实例以后,我们编程中的大多数工作都讲关注在类的简历和实例对象使用,修改和维护上。
结合实例我们来进一步的学习类和实例的使用:
我们新建一个汽车的类:
#-*- coding:utf-8 -*-
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
def get_description_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
my_car = Car("audi", "A4", 2016)
print(my_car.get_description_name())
'''
输出:
2016 Audi A4
'''
通过上面的例子我们可以看到,我们创建了一个car的类,这个类有三个参数,并且有一个打印所有信息的一个方法。
我们知道其实每个属性都有初始的值,有些时候我们的属性并不是为空或者0,他需要一个默认的其他值。我们可以在类的__init__方法中,对一些属性进行初始化。一旦属性具有初始值后,在实例化对象时,可以不提供数值。
我们在类中添加一个里程表的属性,他的初始值应该为0,我们添加一个方法用来读取这个属性。
#-*- coding:utf-8 -*-
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_description_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
my_car = Car("audi", "A4", 2016)
print(my_car.get_description_name())
my_car.read_odometer()
'''
输出:
2016 Audi A4
This car has 0 miles on it.
'''
我们可以直接修改实例的属性,来实现我么预想的操作:
#-*- coding:utf-8 -*-
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_description_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
my_car = Car("audi", "A4", 2016)
print(my_car.get_description_name())
my_car.read_odometer()
my_car.odometer_reading = 100
my_car.read_odometer()
'''
输出:
2016 Audi A4
This car has 0 miles on it.
This car has 100 miles on it.
'''
也可以通过添加特定方法来实现对实例属性的修改:
#-*- coding:utf-8 -*-
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_description_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
self.odometer_reading = mileage
my_car = Car("audi", "A4", 2016)
print(my_car.get_description_name())
my_car.read_odometer()
my_car.update_odometer(200)
my_car.read_odometer()
'''
输出:
2016 Audi A4
This car has 0 miles on it.
This car has 200 miles on it.
'''
我么知道里程数一般都是递增的,正常情况下我们是无法将其往回调整的,所以我们需要对update函数进一步的优化。输入的参数必须大于等于当前值,小于则必须报错:
#-*- coding:utf-8 -*-
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_description_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You cannot do that.")
my_car = Car("audi", "A4", 2016)
print(my_car.get_description_name())
my_car.read_odometer()
my_car.update_odometer(200)
my_car.read_odometer()
my_car.update_odometer(100)
my_car.read_odometer()
'''
输出:
2016 Audi A4
This car has 0 miles on it.
This car has 200 miles on it.
You cannot do that.
This car has 200 miles on it.
'''
根据现实中的情况,其实我们定义一个增量方法更为合适,该方法每次都加上参数给定的值,并且该值应该大于等于0:
#-*- coding:utf-8 -*-
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_description_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You cannot do that.")
def increase_odometer(self, miles):
if miles >= 0:
self.odometer_reading += miles
else:
print("The value is invalid, please input the number which should more than zero.")
my_car = Car("audi", "A4", 2016)
print(my_car.get_description_name())
my_car.read_odometer()
my_car.update_odometer(200)
my_car.read_odometer()
my_car.increase_odometer(100)
my_car.read_odometer()
my_car.increase_odometer(-1)
my_car.read_odometer()
'''
输出:
2016 Audi A4
This car has 0 miles on it.
This car has 200 miles on it.
This car has 300 miles on it.
The value is invalid, please input the number which should more than zero.
This car has 300 miles on it.
'''
Python 学习笔记14 类 - 使用类和实例的更多相关文章
- Python学习笔记(一)类和继承的使用
一年前就打算学Python了,折腾来折腾去也一直没有用熟练,主要是类那一块不熟,昨天用Python写了几个网络编程的示例,感觉一下子迈进了很多.这几天把学习Python的笔记整理一下,内容尽量简洁. ...
- python学习笔记(五)---函数与类
函数 def为定义函数的一个标志 demo1: def greet_user(username): print("Hello, " + username.title() + &qu ...
- Python学习笔记:面向对象(类)
1.类定义:Python3中,如果新建的类没有继承任何其他类,默认继承基础类object.Python2中如果没有显式继承object类就是经典类,而显式继承了object类就是新式类,Python2 ...
- Python学习笔记(六)——类和对象
1.self的用法 全面理解self 2. 继承 子类继承父类,自动拥有父类的全部方法 >>> class Animal: def run(self): print('Animal ...
- python学习笔记(24)-类与对象
#类与对象 #python类的语法 关键字 class #class 类名 类名的规范是:数字字母下划线组成,不能以数字开头 首字母大写 驼峰命名 #类属性 放在类里面的变量值 #类方法 放在类里面的 ...
- python学习笔记1 -- 面向对象编程类和实例
由于之前有一定基础,所以python中的类的概接受的比较快,与其他语言一样, python也是通过类来进行事务的抽象,一切皆对象,要不然怎么说程序员不缺对象呢. 言归正传,python中类的声明是cl ...
- Python学习笔记之unittest测试类
11-3 雇员:编写一个名为Employee 的类,其方法__init__()接受名.姓和年薪,并将它们都存储在属性中.编写一个名为give_raise()的方法,它默认将年薪增加5000美元,但也能 ...
- python学习笔记十二:类的定义
demo #!/usr/bin/python class Person: name = 'jim' age = 25 def say(self): print 'My name is ' + self ...
- python学习笔记14(多态、封装、继承)
创建自已的对象(尤其是类型或者被称为类的对象)是python非常核心的概念. 多态: 可对不同类的对象使用同样的操作. 封装:对外部世界隐藏对象的工作细节. 继承:以普通的类为基础建立专门的类对象. ...
随机推荐
- Centos6.5 使用YUM安装MariaDB
1,第一步 [xxxxxx]$ cd /etc/yum.repos.d [xxxxxx]$ vi MariaDB.repo # MariaDB 10.0 CentOS repository list ...
- weBDrriver API接口方法小记
3.2.1 输入框(text field or textarea) 找到输入框元素:WebElement element = driver.findElement(By.id("passwd ...
- python写入mysql
import pymysql conn = pymysql.connect(host='192.168.70.129',port=3306,user='root',passwd='123456', ...
- day65--mysql数据库--索引、慢日志、分页
---恢复内容开始--- 一.索引 (一)介绍: 数据库中专门用于帮助用户快速查找数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置吗,然后直接获取. (二)作用: ...
- C语言接口
struct i_foo * foobar_foo(void); //返回接口指针struct foo_object * foo_create(struct i_foo *iface, void *d ...
- vue 移动端列表筛选功能实现
最近兴趣所致,打算使用vant搭建一个webapp,由于需要使用列表筛选,没有找到合适组件,于是写了一个简单的功能,权当记录. 效果如下: HTML: <div class=&qu ...
- 关于在IE下JavaScript的 Stack overflow at line 错误可能的原因
该错误只在IE中出现,出现该提示的原因主要有两种: 1. 重定义了系统的触发事件名称作为自定义函数名如: onclick / onsubmit … 都是系统保留的事件名称,不允许作为重定义函数名称 ...
- linux设置python虚拟环境的环境变量
针对 linux系统中 python虚拟环境 设置环境变量 2种方法: 1.在建好的虚拟环境的 venv/bin/active 文件中,写入需要的环境变量,再进入虚拟环境: 如 配置文件路径 JERR ...
- 3.自定义返回json格式的数据给前台(自定义Controller类中的Json方法)
在mvc的项目中,我们前台做一些操作时,后台要返回一些结果给前台,这个时候我们就需要有一个状态来标识到底是什么类型的错误, 例如: 执行删除的时候,如果操作成功(1行受影响),我们需要返回状态为1并输 ...
- vue部署后刷新404问题
为什么会404NotFound Internet Information Services (IIS) 第一步:安装 IIS UrlRewrite 第二步:配置重写URL规则 在你的网站根目录中创建一 ...