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中for循环的使用
Apr 14 Python
在Python中使用模块的教程
Apr 27 Python
Python实现二分查找算法实例
May 26 Python
独特的python循环语句
Nov 20 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
pandas.dataframe按行索引表达式选取方法
Oct 30 Python
python打印n位数“水仙花数”(实例代码)
Dec 25 Python
python实现将json多行数据传入到mysql中使用
Dec 31 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
Feb 25 Python
Python实现AI自动抠图实例解析
Mar 05 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 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
php IP及IP段进行访问限制的代码
2008/12/17 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
2017/06/17 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
vue项目中使用fetch的实现方法
2019/04/25 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
用Python写冒泡排序代码
2016/04/12 Python
opencv python 2D直方图的示例代码
2018/07/20 Python
Python日志模块logging基本用法分析
2018/08/23 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
keras 权重保存和权重载入方式
2020/05/21 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
美国领先的男士和女士内衣购物网站:Freshpair
2019/02/25 全球购物
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
给导游的表扬信
2014/01/10 职场文书
银行类自荐信
2014/02/04 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
高中生社会实践心得体会
2016/01/14 职场文书
学习党章心得体会2016
2016/01/15 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript
css3带你实现3D转换效果
2022/02/24 HTML / CSS
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技