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中的文档测试模块
Apr 28 Python
python简单猜数游戏实例
Jul 09 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
Python使用Shelve保存对象方法总结
Jan 28 Python
python 实现selenium断言和验证的方法
Feb 13 Python
python图像处理入门(一)
Apr 04 Python
python实现二级登陆菜单及安装过程
Jun 21 Python
简单了解Django ContentType内置组件
Jul 23 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Aug 20 Python
wxPython+Matplotlib绘制折线图表
Nov 19 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
Feb 18 Python
Django ORM filter() 的运用详解
May 14 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
oracle资料库函式库
2006/10/09 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
php bootstrap实现简单登录
2016/03/08 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
JS 建立对象的方法
2007/04/21 Javascript
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
js jquery数组介绍
2012/07/15 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
JS实现关闭当前页而不弹出提示框的方法
2016/06/22 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
Python操作MySQL数据库9个实用实例
2015/12/11 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
Python 占位符的使用方法详解
2019/07/10 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
使用canvas绘制超炫时钟
2014/12/17 HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
教师自荐书
2013/10/08 职场文书
行政管理专业求职信
2014/07/06 职场文书
建筑安全责任书范本
2014/07/24 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
千手观音观后感
2015/06/03 职场文书
狂人日记读书笔记
2015/06/30 职场文书
仓库管理制度范本
2015/08/04 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
Python MNIST手写体识别详解与试练
2021/11/07 Python