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非常核心的概念. 多态: 可对不同类的对象使用同样的操作. 封装:对外部世界隐藏对象的工作细节. 继承:以普通的类为基础建立专门的类对象. ...
随机推荐
- style中各种选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用transporter同步MongoDB数据到es
由于logstash不支持MongoDB自定义主键导入es,所以使用transporter导入数据. 版本:es5.x,transporter0.25, es6以上不允许一个索引下面多个type,tr ...
- Swoole 简单学习(2)
Swoole 简单学习(2) swoole之tcp服务器: //创建tcp服务器new swoole_server(string $host,int $port,int $mode=SWOOLE_PR ...
- Factory Methods
The static factory method pattern is a way to encapsulate object creation. Without a factory method, ...
- find命令进阶用法(一)
-cmin n: 查找 exactly n 分钟前内容或属性被最后修过的文件 -cnewer file: 查找内容或属性的最后修改时间晚于file文件的文件 -ctime n: 查找 **n*24** ...
- springboot 加载jsp 刷新jsp ,刷新Controller (亲自尝试)
解决jsp加载成功.<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId&g ...
- Struts2基础-2 -实现Action接口创建Action控制器
1.新建一个web项目,目录结构如下,添加jar包到lib文件夹里,并把jar包add 到 buildpath里面 2.web.xml配置 struts2的过滤器类:StrutsPrepareAndE ...
- 阿里云HPC助力新制造 | 上汽仿真计算云SSCC
随着上汽集团与阿里云的合作开展,阿里云各项技术逐步深入到上汽汽车研发领域的核心业务实现落地.其中上海汽车集团股份有限公司乘用车分公司(以下简称上汽乘用车)与阿里云共建的仿真计算混合云就是新制造产业升级 ...
- Java Web学习总结(2)Servlet(一)
一,Servlet 简介 Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间 ...
- 【C++11新特性】 C++11智能指针之weak_ptr
如题,我们今天要讲的是C++11引入的三种智能指针中的最后一个:weak_ptr.在学习weak_ptr之前最好对shared_ptr有所了解.如果你还不知道shared_ptr是何物,可以看看我的另 ...