目标

  • 封装
  • 小明爱跑步
  • 存放家具

    01. 封装

  1. 封装 是面向对象编程的一大特点
  2. 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中
  3. 外界 使用 类 创建 对象,然后 让对象调用方法
  4. 对象方法的细节 都被 封装 在 类的内部

    02. 小明爱跑步

    需求

  5. 小明 体重 75.0 公斤

  6. 小明每次 跑步 会减肥 0.5 公斤
  7. 小明每次 吃东西 体重增加 1 公斤

封装案例Ⅰ - 图1

  1. class Person:
  2. def __init__(self, name, weight):
  3. self.name = name
  4. self.weight = weight
  5. def __str__(self):
  6. return "%s 体重 %.2f 公斤" % (self.name, self.weight)
  7. def run(self):
  8. self.weight -= 0.5
  9. def eat(self):
  10. self.weight += 1
  11. xiaoming = Person("小明", 50)
  12. print(xiaoming)
  13. xiaoming.eat()
  14. print(xiaoming)
  15. xiaoming.eat()
  16. xiaoming.run()
  17. print(xiaoming)

提示:在 对象的方法内部,是可以 直接访问对象的属性 的!

03. 摆放家具

需求

  1. 房子(House)有户型、总面积和家具名称列表
    • 新房子没有任何的家具
  2. 家具(HouseItem)有名字和占地面积,其中
    • 席梦思(bed) 占地 4 平米
    • 衣柜(chest) 占地 2 平米
    • 餐桌(table) 占地 1.5 平米
  3. 将以上三件 家具 添加 到 房子 中
  4. 打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表

封装案例Ⅰ - 图2

  1. class HouseItem:
  2. def __init__(self, name, area):
  3. self.name = name
  4. self.area = area
  5. def __str__(self):
  6. return "家具名称:%s, 占地:%.2f平方米" % (self.name, self.area)
  1. import HouseItem
  2. class House:
  3. def __init__(self, house_type, area):
  4. self.house_type = house_type
  5. self.area = area
  6. self.free_area = area
  7. self.item_list = []
  8. def __str__(self):
  9. return "户型:%s\n总面积:%.2f[剩余面积:%.2f]\n家具名称列表:%s" % (
  10. self.house_type,
  11. self.area,
  12. self.free_area,
  13. self.item_list
  14. )
  15. def add_item(self, item):
  16. """添加家具(如果剩余空间够的话)
  17. :param item: 被添加的家具
  18. :return: None
  19. """
  20. print("即将添加家具 %s" % item)
  21. if self.free_area < item.area:
  22. print("剩余面积不足,无法添加")
  23. return
  24. self.item_list.append(item.name)
  25. self.free_area -= item.area
  26. print("添加成功")
  27. # 1. 创建家具
  28. bed = HouseItem.HouseItem("席梦思", 4)
  29. chest = HouseItem.HouseItem("衣柜", 2)
  30. table = HouseItem.HouseItem("餐桌", 1.5)
  31. print(bed)
  32. print(chest)
  33. print(table)
  34. # 2. 创建房子对象
  35. my_home = House("两室一厅", 60)
  36. my_home.add_item(bed)
  37. my_home.add_item(chest)
  38. my_home.add_item(table)
  39. print(my_home)

image.png