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


Posted in Python onDecember 31, 2019

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

目标

封装
小明爱跑步
存放家具

01. 封装

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

02. 小明爱跑步

需求

小明 体重 75.0 公斤
小明每次 跑步 会减肥 0.5 公斤
小明每次 吃东西 体重增加 1 公斤
Python面向对象封装操作案例详解
提示:在 对象的方法内部,是可以 直接访问对象的属性 的!

代码实现:

class Person:
  """人类"""

  def __init__(self, name, weight):

    self.name = name
    self.weight = weight

  def __str__(self):

    return "我的名字叫 %s 体重 %.2f 公斤" % (self.name, self.weight)

  def run(self):
    """跑步"""

    print("%s 爱跑步,跑步锻炼身体" % self.name)
    self.weight -= 0.5

  def eat(self):
    """吃东西"""

    print("%s 是吃货,吃完这顿再减肥" % self.name)
    self.weight += 1


xiaoming = Person("小明", 75)

xiaoming.run()
xiaoming.eat()
xiaoming.eat()

print(xiaoming)

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

需求

小明 和 小美 都爱跑步
小明 体重 75.0 公斤
小美 体重 45.0 公斤
每次 跑步 都会减少 0.5 公斤
每次 吃东西 都会增加 1 公斤
Python面向对象封装操作案例详解
提示

在 对象的方法内部,是可以 直接访问对象的属性 的
同一个类 创建的 多个对象 之间,属性 互不干扰!
Python面向对象封装操作案例详解

03. 摆放家具

需求

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

在创建房子对象时,定义一个 剩余面积的属性,初始值和总面积相等
当调用 add_item 方法,向房间 添加家具 时,让 剩余面积 -= 家具面积
思考:应该先开发哪一个类?

答案 —— 家具类

家具简单
房子要使用到家具,被使用的类,通常应该先开发

3.1 创建家具

class HouseItem:

  def __init__(self, name, area):
    """

    :param name: 家具名称
    :param area: 占地面积
    """
    self.name = name
    self.area = area

  def __str__(self):
    return "[%s] 占地面积 %.2f" % (self.name, self.area)


# 1. 创建家具
bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)

print(bed)
print(chest)
print(table)

小结

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

3.2 创建房间

class House:

  def __init__(self, house_type, area):
    """

    :param house_type: 户型
    :param area: 总面积
    """
    self.house_type = house_type
    self.area = area
    
    # 剩余面积默认和总面积一致
    self.free_area = area
    # 默认没有任何的家具
    self.item_list = []

  def __str__(self):

    # Python 能够自动的将一对括号内部的代码连接在一起
    return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"
        % (self.house_type, self.area,
          self.free_area, self.item_list))

  def add_item(self, item):

    print("要添加 %s" % item)

...

# 2. 创建房子对象
my_home = House("两室一厅", 60)

my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)

print(my_home)

小结

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

3.3 添加家具

需求

1> 判断 家具的面积 是否 超过剩余面积,如果超过,提示不能添加这件家具
2> 将 家具的名称 追加到 家具名称列表 中
3> 用 房子的剩余面积 - 家具面积

def add_item(self, item):

    print("要添加 %s" % item)
    # 1. 判断家具面积是否大于剩余面积
    if item.area > self.free_area:
      print("%s 的面积太大,不能添加到房子中" % item.name)

      return

    # 2. 将家具的名称追加到名称列表中
    self.item_list.append(item.name)

    # 3. 计算剩余面积
    self.free_area -= item.area

3.4 小结

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

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

Python 相关文章推荐
Python异常学习笔记
Feb 03 Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 Python
python方向键控制上下左右代码
Jan 20 Python
Python 3.6 读取并操作文件内容的实例
Apr 23 Python
python+influxdb+shell编写区域网络状况表
Jul 27 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
Python MySQLdb 执行sql语句时的参数传递方式
Mar 04 Python
python中np是做什么的
Jul 21 Python
Python如何重新加载模块
Jul 29 Python
pyqt5蒙版遮罩mask,setmask的使用
Jun 11 Python
python自动化测试通过日志3分钟定位bug
Nov 20 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
Dec 31 #Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 #Python
Pycharm最新激活码2019(推荐)
Dec 31 #Python
python ftplib模块使用代码实例
Dec 31 #Python
深入了解如何基于Python读写Kafka
Dec 31 #Python
Python面向对象之继承原理与用法案例分析
Dec 31 #Python
pytorch中nn.Conv1d的用法详解
Dec 31 #Python
You might like
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
PHP常用的小程序代码段
2015/11/14 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
php技巧小结【推荐】
2017/01/19 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
jQuery 常见学习网站与参考书
2009/11/09 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
2013/09/06 Javascript
window.print打印指定div指定网页指定区域的方法
2014/08/04 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
2016/12/18 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
利用Angular.js编写公共提示模块的方法教程
2017/05/28 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
python如何制作英文字典
2019/06/25 Python
python turtle 绘制太极图的实例
2019/12/18 Python
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
简历的自荐信
2013/12/19 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
材料会计岗位职责
2014/03/06 职场文书
个人四风对照检查材料
2014/09/26 职场文书
签订劳动合同通知书
2015/04/16 职场文书
廉政承诺书2015
2015/04/28 职场文书
小学六年级毕业感言
2015/07/30 职场文书
iPhone13再次曝光
2021/04/15 数码科技