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 14 Python
Python中使用md5sum检查目录中相同文件代码分享
Feb 02 Python
浅谈Python的异常处理
Jun 19 Python
Python简单遍历字典及删除元素的方法
Sep 18 Python
python 内置模块详解
Jan 01 Python
python自动保存百度盘资源到百度盘中的实例代码
Aug 26 Python
Python 下载及安装详细步骤
Nov 04 Python
django日志默认打印request请求信息的方法示例
May 17 Python
Python实现爬取网页中动态加载的数据
Aug 17 Python
Python 测试框架unittest和pytest的优劣
Sep 26 Python
python 实现图片裁剪小工具
Feb 02 Python
Python使用Turtle模块绘制国旗的方法示例
Feb 28 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
建立文件交换功能的脚本(一)
2006/10/09 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
javascript高亮效果的二种实现方法
2008/09/14 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
[55:18]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
21行Python代码实现拼写检查器
2016/01/25 Python
浅析Python编写函数装饰器
2016/03/18 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
中学家长会邀请函
2014/02/03 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
激励员工的口号
2014/06/16 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
教师节校长致辞
2015/07/31 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python