『无为则无心』Python面向对象 — 49、面向对象综合应用
1、烤地瓜
(1)需求
1)被烤的时间和对应的地瓜状态:
- 0-3分钟:生的。
- 3-5分钟:半生不熟。
- 5-8分钟:熟的。
- 超过8分钟:烤糊了。
2)添加的调料:
用户可以按自己的意愿添加调料。
(2)步骤分析
需求涉及一个事物: 地瓜,故案例涉及一个类:地瓜类。
1)地瓜的属性:
- 被烤的时间。
- 地瓜的状态。
- 添加的调料。
2)地瓜的方法:
- 被烤。
- 用户根据意愿设定每次烤地瓜的时间。
- 判断地瓜被烤的总时间是在哪个区间,修改地瓜状态。
- 添加调料。
- 用户根据意愿设定添加的调料。
- 将用户添加的调料存储。
- 显示对象信息。
(3)代码实现
1)地瓜属性。
定义地瓜初始化属性,后期根据程序推进更新实例属性。
class SweetPotato():
def __init__(self):
# 被烤的时间
self.cook_time = 0
# 地瓜的状态
self.cook_static = '生的'
# 调料列表
self.condiments = []
2)定义烤地瓜方法。
class SweetPotato():
......
def cook(self, time):
"""烤地瓜的方法"""
# self.cook_time是已考过的时间
# time是这次考的时间,调用一次cook方法就算考一次
self.cook_time += time
if 0 <= self.cook_time < 3:
self.cook_static = '生的'
elif 3 <= self.cook_time < 5:
self.cook_static = '半生不熟'
elif 5 <= self.cook_time < 8:
self.cook_static = '熟了'
elif self.cook_time >= 8:
self.cook_static = '烤糊了'
3)书写str魔法方法,用于输出对象状态。
class SweetPotato():
......
def __str__(self):
return f'这个地瓜烤了{self.cook_time}分钟, 状态是{self.cook_static}'
4)创建对象,测试实例属性和实例方法。
# 创建对象
digua1 = SweetPotato()
# 打印对象中的__str__方法
# 这个地瓜烤了0分钟, 状态是生的, 添加的调料有[]
print(digua1)
# 调用对象的烹饪cook方法
digua1.cook(2)
# 再查看地瓜状态
# 这个地瓜烤了2分钟, 状态是生的, 添加的调料有[]
print(digua1)
5)定义添加调料方法,并调用该实例方法。
class SweetPotato():
......
# 添加调料方法
def add_condiments(self, condiment):
"""添加调料"""
self.condiments.append(condiment)
def __str__(self):
return f'这个地瓜烤了{self.cook_time}分钟, 状态是{self.cook_static}, 添加的调料有{self.condiments}'
# 创建对象
digua1 = SweetPotato()
# 打印对象中的__str__方法
# 这个地瓜烤了0分钟, 状态是生的, 添加的调料有[]
print(digua1)
# 调用对象的烹饪cook方法
digua1.cook(2)
# 调用添加调料
digua1.add_condiments('酱油')
# 再查看地瓜状态
# 这个地瓜烤了2分钟, 状态是生的, 添加的调料有['酱油']
print(digua1)
# 再烤两分钟,再加调料
# 这个地瓜烤了4分钟, 状态是半生不熟, 添加的调料有['酱油', '辣椒面儿']
digua1.cook(2)
digua1.add_condiments('辣椒面儿')
print(digua1)
# 还不熟继续烤
# 这个地瓜烤了6分钟, 状态是熟了, 添加的调料有['酱油', '辣椒面儿']
digua1.cook(2)
print(digua1)
(4)代码总览
# 定义类
class SweetPotato():
def __init__(self):
# 被烤的时间
self.cook_time = 0
# 地瓜的状态
self.cook_static = '生的'
# 调料列表
self.condiments = []
# 烤白薯方法
def cook(self, time):
"""烤地瓜的方法"""
# self.cook_time是已考过的时间
# time是这次考的时间,调用一次cook方法就算考一次
self.cook_time += time
if 0 <= self.cook_time < 3:
self.cook_static = '生的'
elif 3 <= self.cook_time < 5:
self.cook_static = '半生不熟'
elif 5 <= self.cook_time < 8:
self.cook_static = '熟了'
elif self.cook_time >= 8:
self.cook_static = '烤糊了'
# 添加调料方法
def add_condiments(self, condiment):
"""添加调料"""
# 用户意愿的调料追加到调料列表
self.condiments.append(condiment)
def __str__(self):
return f'这个地瓜烤了{self.cook_time}分钟, 状态是{self.cook_static}, 添加的调料有{self.condiments}'
# 创建对象并调用对应的实例方法
# 创建对象
digua1 = SweetPotato()
# 打印对象中的__str__方法
# 这个地瓜烤了0分钟, 状态是生的, 添加的调料有[]
print(digua1)
# 调用对象的烹饪cook方法
digua1.cook(2)
# 调用添加调料
digua1.add_condiments('酱油')
# 再查看地瓜状态
# 这个地瓜烤了2分钟, 状态是生的, 添加的调料有['酱油']
print(digua1)
# 再烤两分钟,再加调料
# 这个地瓜烤了4分钟, 状态是半生不熟, 添加的调料有['酱油', '辣椒面儿']
digua1.cook(2)
digua1.add_condiments('辣椒面儿')
print(digua1)
# 还不熟继续烤
# 这个地瓜烤了6分钟, 状态是熟了, 添加的调料有['酱油', '辣椒面儿']
digua1.cook(2)
print(digua1)
# 再继续烤,要烤糊白薯
# 这个地瓜烤了8分钟, 状态是烤糊了, 添加的调料有['酱油', '辣椒面儿']
digua1.cook(2)
print(digua1)
2、搬家具
(1)需求
将小于房子剩余面积的家具摆放到房子中
(2)步骤分析
需求涉及两个事物:房子 和 家具,故被案例涉及两个类:房子类 和 家具类。
1)房子类
- 实例属性
- 房子地理位置
- 房子占地面积
- 房子剩余面积
- 房子内家具列表
- 实例方法
- 容纳家具
- 显示房屋信息
2)家具类
- 家具名称
- 家具占地面积
(3)代码实现
1)家具类
class Furniture():
def __init__(self, name, area):
# 家具名字
self.name = name
# 家具占地面积
self.area = area
# 创建一张双人床, 占地面积6
bed = Furniture('双人床', 6)
sofa = Furniture('沙发', 10)
2)房子类
class Home():
def __init__(self, address, area):
# 地理位置
self.address = address
# 房屋面积
self.area = area
# 剩余面积
self.free_area = area
# 家具列表
self.furniture = []
def __str__(self):
return f'房子坐落于{self.address}, 占地面积{self.area}, 剩余面积{self.free_area}, 家具有{self.furniture}'
# 添加家具的方法,item是一个家具的示例对象
def add_furniture(self, item):
"""容纳家具"""
# 剩余面积大于家具面积,才可以添加家具
if self.free_area >= item.area:
# 添加到家具列表中
self.furniture.append(item.name)
# 家具搬入后,更新房屋剩余面积
# 房屋剩余面积 = 之前剩余面积 - 该家具面积
self.free_area -= item.area
else:
print('家具太大,剩余面积不足,无法容纳')
# 创建一个房子1实例: 在北京, 1000平
jia1 = Home('北京', 1000)
# 房子坐落于北京, 占地面积1000, 剩余面积1000, 家具有[]
print(jia1)
# 添加家具,参数是传入一个家具的实例
jia1.add_furniture(bed)
print(jia1)
3)创建对象并调用实例属性和方法
# 创建家具实例
bed = Furniture('双人床', 6)
# 创建房屋实例
jia1 = Home('北京', 1200)
# 房屋现状
# 房子坐落于北京, 占地面积1200, 剩余面积1200, 家具有[]
print(jia1)
# 添加家具到房屋
jia1.add_furniture(bed)
# 查看房屋现状
# 房子坐落于北京, 占地面积1200, 剩余面积1194, 家具有['双人床']
print(jia1)
# 添加个篮球场
ball = Furniture('篮球场', 1500)
# 家具太大,剩余面积不足,无法容纳
jia1.add_furniture(ball)
# 查看房屋现状
# 房子坐落于北京, 占地面积1200, 剩余面积1194, 家具有['双人床']
print(jia1)
提示:三块代码,放到一起就可以查看效果了。