Python OOP 项目实践:烤地瓜,搬家具

一、烤地瓜案例

(一)需求

1.被烤的时间和对应的地瓜状态

  • 0-3分钟:生的
  • 3-5分钟:半生不熟
  • 5-8分钟:熟的
  • 超过8分钟:烤糊了

2.添加调料

  • 用户可以按自己的意愿添加调料

(二)步骤分析

需求涉及一个事物:地瓜,故案例涉及一个类:地瓜类。

1.定义类

  • 地瓜的属性
    – 被烤的时间
    – 地瓜的状态
    – 添加的调料
  • 地瓜的方法
    – 被烤
    ----- 用户根据意愿设定每次烤地瓜的时间
    ----- 判断地瓜被烤的总时间是在哪个区间,修改地瓜状态
    – 添加调料
    ----- 用户根据意愿设定添加的调料
    ----- 将用户添加的调料存储
  • 显示对象信息

(三)代码实现

1、定义类
地⽠属性,定义地⽠初始化属性,后期根据程序推进更新实例属性

# 1.定义类:初始化属性,被烤,添加属性,现实对象信息的str
class SweetPotato:
    def __init__(self):
        # 被烤的时间
        self.cook_time = 0
        # 烤的状态
        self.cook_state = "生的"
        # 调料列表
        self.condiments = []

2、定义烤地⽠⽅法

# 创建对象并调用对应的实例方法
    def cook(self, time):
        # 先计算地瓜整体被烤的时间
        self.cook_time += time
        # 用整体被烤的时间判断滴管状态
        if 0 <= self.cook_time < 3:
            self.cook_state = "生的"
        elif 3 <= self.cook_time < 5:
            self.cook_state = "半生不熟"
        elif 5 <= self.cook_time < 8:
            self.cook_state = "熟的"
        elif self.cook_time >= 8:
            self.cook_state = "烤糊了"

3、书写str魔法⽅法,⽤于输出对象状态

    def __str__(self):
        return "这个地瓜被烤的时间是{},状态是{}".format(self.cook_time, self.cook_state)

4、 创建对象,测试实例属性和实例⽅法

digua1 = SweetPotato()
print(digua1)

digua1.cook(2)
print(digua1)

digua1.cook(2)
print(digua1)

输出:
这个地瓜被烤的时间是0,状态是生的
这个地瓜被烤的时间是2,状态是生的
这个地瓜被烤的时间是4,状态是半生不熟

5、定义添加调料⽅法,并调⽤该实例⽅法

    def add_condiments(self, condiment):
        self.condiments.append(condiment)

    def __str__(self):
        return "这个地瓜被烤的时间是{},状态是{},添加调料是{}".format(self.cook_time, self.cook_state, self.condiments)

6、完整代码

# 1.定义类:初始化属性,被烤,添加属性,现实对象信息的str
class SweetPotato:
    def __init__(self):
        # 被烤的时间
        self.cook_time = 0
        # 烤的状态
        self.cook_state = "生的"
        # 调料列表
        self.condiments = []
# 创建对象并调用对应的实例方法
    def cook(self, time):
        # 先计算地瓜整体被烤的时间
        self.cook_time += time
        # 用整体被烤的时间判断滴管状态
        if 0 <= self.cook_time < 3:
            self.cook_state = "生的"
        elif 3 <= self.cook_time < 5:
            self.cook_state = "半生不熟"
        elif 5 <= self.cook_time < 8:
            self.cook_state = "熟的"
        elif self.cook_time >= 8:
            self.cook_state = "烤糊了"

    def add_condiments(self, condiment):
        self.condiments.append(condiment)

    def __str__(self):
        return "这个地瓜被烤的时间是{},状态是{},添加调料是{}".format(self.cook_time, self.cook_state, self.condiments)


digua1 = SweetPotato()
print(digua1)

digua1.cook(2)
digua1.add_condiments("spicy")
print(digua1)

digua1.cook(2)
digua1.add_condiments("oil")
print(digua1)

二、搬家具

1、需求

将⼩于房⼦剩余⾯积的家具摆放到房⼦中

2、步骤分析

需求涉及两个事物:房⼦和 家具,故被案例涉及两个类:房⼦类 和 家具类。

3、定义类
3.1、房⼦类

  • 实例属性
    – 房⼦地理位置
    – 房⼦占地⾯积
    – 房⼦剩余⾯积
    – 房⼦内家具列表
  • 实例⽅法
    – 容纳家具
  • 显示房屋信息
  • 家具类
    – 家具名称
    – 家具占地⾯积

4、创建对象并调用相关方法

5、代码实现

6、定义类

# 定义家具类
class Furniture:
    def __init(self, name, area):
        self.name = name
        self.area = area
# 定义房子类
class Home:
    def __init__(self, address, area):
        self.address = address
        self.area = area
        self.free_area = area
        self.furniture = []
        # 4个属性2个形参

    def __str__(self):
     

7、创建对象并调⽤实例属性和⽅法

# 定义家具类
class Furniture:
    def __init__(self, name, area):
        self.name = name
        self.area = area

# 定义房子类
class Home:
    def __init__(self, address, area):
        self.address = address
        self.area = area
        self.free_area = area
        self.furniture = []
        # 4个属性2个形参

    def add_furniture(self, item):
        if item.area < self.free_area:  # item.area, item.name 访问对象属性
            self.furniture.append(item.name)
            self.free_area -= item.area
        else:
            print("家具{}太大,剩余面积{}无法容纳".format(item.area, self.free_area))

    def __str__(self):
        return "房子位置{},房屋面积{},房屋剩余面积{},家具{}".format(self.address, self.area, self.free_area, self.furniture)

bed = Furniture("adult bed", 10)
sofa = Furniture("large sofa", 6)

jia1 = Home("beijing", 1000)
print(jia1)

jia1.add_furniture(sofa)
print(jia1)

ball = Furniture("big ball", 2000)
jia1.add_furniture(ball)
print(jia1)

输出:
房子位置beijing,房屋面积1000,房屋剩余面积1000,家具[]
房子位置beijing,房屋面积1000,房屋剩余面积994,家具['large sofa']
家具2000太大,剩余面积994无法容纳
房子位置beijing,房屋面积1000,房屋剩余面积994,家具['large sofa']

猜你喜欢

转载自blog.csdn.net/weixin_47008635/article/details/114557252