当我们熟悉和掌握了怎么样创建类和实例以后,我们编程中的大多数工作都讲关注在类的简历和实例对象使用,修改和维护上。

结合实例我们来进一步的学习类和实例的使用:

我们新建一个汽车的类:

#-*- 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 类 - 使用类和实例的更多相关文章

  1. Python学习笔记(一)类和继承的使用

    一年前就打算学Python了,折腾来折腾去也一直没有用熟练,主要是类那一块不熟,昨天用Python写了几个网络编程的示例,感觉一下子迈进了很多.这几天把学习Python的笔记整理一下,内容尽量简洁. ...

  2. python学习笔记(五)---函数与类

    函数 def为定义函数的一个标志 demo1: def greet_user(username): print("Hello, " + username.title() + &qu ...

  3. Python学习笔记:面向对象(类)

    1.类定义:Python3中,如果新建的类没有继承任何其他类,默认继承基础类object.Python2中如果没有显式继承object类就是经典类,而显式继承了object类就是新式类,Python2 ...

  4. Python学习笔记(六)——类和对象

    1.self的用法 全面理解self 2. 继承 子类继承父类,自动拥有父类的全部方法 >>> class Animal: def run(self): print('Animal ...

  5. python学习笔记(24)-类与对象

    #类与对象 #python类的语法 关键字 class #class 类名 类名的规范是:数字字母下划线组成,不能以数字开头 首字母大写 驼峰命名 #类属性 放在类里面的变量值 #类方法 放在类里面的 ...

  6. python学习笔记1 -- 面向对象编程类和实例

    由于之前有一定基础,所以python中的类的概接受的比较快,与其他语言一样, python也是通过类来进行事务的抽象,一切皆对象,要不然怎么说程序员不缺对象呢. 言归正传,python中类的声明是cl ...

  7. Python学习笔记之unittest测试类

    11-3 雇员:编写一个名为Employee 的类,其方法__init__()接受名.姓和年薪,并将它们都存储在属性中.编写一个名为give_raise()的方法,它默认将年薪增加5000美元,但也能 ...

  8. python学习笔记十二:类的定义

    demo #!/usr/bin/python class Person: name = 'jim' age = 25 def say(self): print 'My name is ' + self ...

  9. python学习笔记14(多态、封装、继承)

    创建自已的对象(尤其是类型或者被称为类的对象)是python非常核心的概念. 多态: 可对不同类的对象使用同样的操作. 封装:对外部世界隐藏对象的工作细节. 继承:以普通的类为基础建立专门的类对象. ...

随机推荐

  1. hdu6354 Everything Has Changed (圆的相交弧长)

    题目传送门 题意: 用一堆圆来切割一个圆心为原点,半径为R的圆A,问切割完毕后圆A外围剩余部分的周长(图中的红线部分). 思路: 首先判定圆与圆A的关系,这题我们只需要与A内切.相交的圆. 然后就是求 ...

  2. call和apply,函数伴侣

    Predefined:js中的this指向直接运行上下文. call和apply是ECMASCRIPT 3在函数原型上所定义的方法,目的在于改变或指定this的指向,从而改变函数直接执行上下文.两者的 ...

  3. facenet 人脸识别(二)——创建人脸库搭建人脸识别系统

    搭建人脸库 选择的方式是从百度下载明星照片 照片下载,downloadImageByBaidu.py # coding=utf-8 """ 爬取百度图片的高清原图 &qu ...

  4. rm - 移除文件或者目录

    总览 rm [options] file... POSIX(Portable Operating System Interface 可移植的操作系统接口) 选项: [-fiRr] GNU 选项 (最短 ...

  5. 脚本_检测mysql存活状态

    #!bin/bash#功能:检测mysql服务是否存活#作者:liusingbon# host为你需要检测的mysql主机的IP 地址,user为mysql账户名,passwd为密码; 这些信息需要根 ...

  6. mysql sqlyog提示2058错误或者用Navicat连接本机Docker的Mysql 和一些问题的解决方案

    1. 下载Mysql的Docker镜像: [plain] view plain copy$ docker search mysql (搜索mysql镜像)  $ docker pull mysql ( ...

  7. 【Leetcode周赛】从contest-111开始。(一般是10个contest写一篇文章)

    Contest 111 (题号941-944)(2019年1月19日,补充题解,主要是943题) 链接:https://leetcode.com/contest/weekly-contest-111 ...

  8. ltp-ddt smp_basic

    SMP_S_FUNC_DUAL_CORE source functions.sh; cmd="stress-ng --matrix 4 -t 10s --perf --matrix-size ...

  9. mongodb 索引分类

    一. 普通索引篇 1.创建索引 创建索引:db.person.ensureIndex({"age":1}).这里我们使用了ensureIndex在age上建立了索引.“1”:表示按 ...

  10. BigDecimal 算数

    BigDecimal big=new BigDecimal("22.233"); BigDecimal big1=new BigDecimal("12.233" ...