AI智能
改变未来

『无为则无心』Python面向对象 — 49、面向对象综合应用

[toc]

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 += timeif 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 += timeif 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# 创建一张双人床, 占地面积6bed = 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.areaelse: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)

    提示:三块代码,放到一起就可以查看效果了。

    赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » 『无为则无心』Python面向对象 — 49、面向对象综合应用