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 相关文章推荐
pyqt4教程之widget使用示例分享
Mar 07 Python
Python3指定路径寻找符合匹配模式文件
May 22 Python
举例讲解Python中metaclass元类的创建与使用
Jun 30 Python
简单谈谈Python流程控制语句
Dec 04 Python
Python实现字典的遍历与排序功能示例
Dec 23 Python
初探TensorFLow从文件读取图片的四种方式
Feb 06 Python
一百行python代码将图片转成字符画
Feb 19 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
python破解bilibili滑动验证码登录功能
Sep 11 Python
python 读取、写入txt文件的示例
Sep 27 Python
python如何做代码性能分析
Apr 26 Python
用Python实现屏幕截图详解
Jan 22 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
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
nginx下安装php7+php5
2016/07/31 PHP
Jquery 弹出层插件实现代码
2009/10/24 Javascript
基于JQuery 滑动与动画的说明介绍
2013/04/18 Javascript
JS实现QQ图片一闪一闪的效果小例子
2013/07/31 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
python之import机制详解
2014/07/03 Python
详解Python3.1版本带来的核心变化
2015/04/07 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
pandas 层次化索引的实现方法
2019/07/06 Python
Python面向对象之Web静态服务器
2019/09/03 Python
django 简单实现登录验证给你
2019/11/06 Python
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
意大利体育用品和运动服网上商店:Maxi Sport
2019/09/14 全球购物
Java如何格式化日期
2012/08/07 面试题
国际政治个人自荐信范文
2013/11/26 职场文书
土木工程专业个人求职信
2013/12/05 职场文书
节电标语大全
2014/06/23 职场文书
重阳节活动总结
2014/08/27 职场文书
小学生思想品德评语
2014/12/31 职场文书
岗位职责范本大全
2015/02/26 职场文书
英文辞职信范文
2015/05/13 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
vue ref如何获取子组件属性值
2022/03/31 Vue.js