page contents

Python面向对象封装操作案例详解

本文实例讲述了Python面向对象封装操作,分享给大家供大家参考。具体如下: 目标 封装小明爱跑步存放家具 封装 封装是面向对象编程的一大特点。面向对象编程的 第一步 —— 将属性和方法封...

本文实例讲述了Python面向对象封装操作,分享给大家供大家参考。具体如下:

目标

封装
小明爱跑步
存放家具


封装

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


小明爱跑步

1 需求

小明体重75.0公斤;

小明每次跑步会减肥0.5公斤;

小明每次吃东西体重增加1公斤。

在这里插入图片描述

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


2 代码实现

  1. class Person:
  2. """人类"""
  3.  
  4. def __init__(self, name, weight):
  5.  
  6. self.name = name
  7. self.weight = weight
  8.  
  9. def __str__(self):
  10.  
  11. return "我的名字叫 %s 体重 %.2f 公斤" % (self.name, self.weight)
  12.  
  13. def run(self):
  14. """跑步"""
  15.  
  16. print("%s 爱跑步,跑步锻炼身体" % self.name)
  17. self.weight -= 0.5
  18.  
  19. def eat(self):
  20. """吃东西"""
  21.  
  22. print("%s 是吃货,吃完这顿再减肥" % self.name)
  23. self.weight += 1
  24.  
  25.  
  26. xiaoming = Person("小明", 75)
  27.  
  28. xiaoming.run()
  29. xiaoming.eat()
  30. xiaoming.eat()
  31.  
  32. print(xiaoming)


3 小明爱跑步扩展 —— 小美也爱跑步

需求

小明和小美都爱跑步;
小明体重75.0 公斤;
小美体重45.0公斤;
每次跑步都会减少0.5公斤;
每次吃东西都会增加1公斤。

在这里插入图片描述

提示:

在对象的方法内部,是可以直接访问对象的属性的。

同一个类创建的多个对象之间,属性互不干扰!



摆放家具

1 需求

房子(House) 有户型、总面积和家具名称列表,新房子没有任何的家具,家具(HouseItem) 有名字和占地面积,其中:

席梦思(bed) 占地 4 平米;

衣柜(chest) 占地 2 平米;

餐桌(table) 占地 1.5 平米;

将以上三件家具添加到房子中。

打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表。

在这里插入图片描述

2 剩余面积

在创建房子对象时,定义一个 剩余面积的属性,初始值和总面积相等,当调用 add_item 方法,向房间添加家具 时,让 剩余面积 -= 家具面积。

思考:应该先开发哪一个类?

答案 —— 家具类


3 创建家具

  1. class HouseItem:
  2.  
  3. def __init__(self, name, area):
  4. """
  5.  
  6. :param name: 家具名称
  7. :param area: 占地面积
  8. """
  9. self.name = name
  10. self.area = area
  11.  
  12. def __str__(self):
  13. return "[%s] 占地面积 %.2f" % (self.name, self.area)
  14.  
  15.  
  16. # 1. 创建家具
  17. bed = HouseItem("席梦思", 4)
  18. chest = HouseItem("衣柜", 2)
  19. table = HouseItem("餐桌", 1.5)
  20.  
  21. print(bed)
  22. print(chest)
  23. print(table)

小结

创建了一个家具类,使用到 init 和 str 两个内置方法,使用家具类创建了 三个家具对象,并且输出家具信息。


4 创建房间

  1. class House:
  2.  
  3. def __init__(self, house_type, area):
  4. """
  5.  
  6. :param house_type: 户型
  7. :param area: 总面积
  8. """
  9. self.house_type = house_type
  10. self.area = area
  11. # 剩余面积默认和总面积一致
  12. self.free_area = area
  13. # 默认没有任何的家具
  14. self.item_list = []
  15.  
  16. def __str__(self):
  17.  
  18. # Python 能够自动的将一对括号内部的代码连接在一起
  19. return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"
  20. % (self.house_type, self.area,
  21. self.free_area, self.item_list))
  22.  
  23. def add_item(self, item):
  24.  
  25. print("要添加 %s" % item)
  26.  
  27. ...
  28.  
  29. # 2. 创建房子对象
  30. my_home = House("两室一厅", 60)
  31.  
  32. my_home.add_item(bed)
  33. my_home.add_item(chest)
  34. my_home.add_item(table)
  35.  
  36. print(my_home)

小结

创建了一个 房子类,使用到 init 和 str 两个内置方法,准备了一个 add_item 方法 准备添加家具,使用房子类创建了 一个房子对象,让房子对象调用了三次 add_item 方法,将 三件家具 以实参传递到 add_item 内部。


5 添加家具

需求

1> 判断 家具的面积是否超过剩余面积,如果超过,提示不能添加这件家具。

2> 将家具的名称追加到家具名称列表中。

3> 用房子的剩余面积 - 家具面积。

  1. def add_item(self, item):
  2.  
  3. print("要添加 %s" % item)
  4. # 1. 判断家具面积是否大于剩余面积
  5. if item.area > self.free_area:
  6. print("%s 的面积太大,不能添加到房子中" % item.name)
  7.  
  8. return
  9.  
  10. # 2. 将家具的名称追加到名称列表中
  11. self.item_list.append(item.name)
  12.  
  13. # 3. 计算剩余面积
  14. self.free_area -= item.area

小结

主程序只负责创建 房子对象和家具对象,让房子 对象调用 add_item 方法将家具添加到房子中,面积计算、剩余面积、家具列表等处理都被封装到房子类的内部。


希望本文所述对大家Python程序设计有所帮助。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-06-lm76LHUd62a43bbc97760.jpeg


  • 发表于 2020-01-02 11:05
  • 阅读 ( 539 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章