目标

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

    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