Python最强知识点整理:面向对象封装案例

2023-11-13

面向对象封装案例

目标

  • 封装
  • 小明爱跑步
  • 存放家具

01. 封装

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

02. 小明爱跑步

需求

  1. 小明 体重 75.0 公斤
  2. 小明每次 跑步 会减肥 0.5 公斤
  3. 小明每次 吃东西 体重增加 1 公斤

在这里插入图片描述

提示:在 对象的方法内部,是可以 直接访问对象的属性 的!

  • 代码实现:
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 小明爱跑步扩展 —— 小美也爱跑步

需求

  1. 小明小美 都爱跑步
  2. 小明 体重 75.0 公斤
  3. 小美 体重 45.0 公斤
  4. 每次 跑步 都会减少 0.5 公斤
  5. 每次 吃东西 都会增加 1 公斤

提示

  1. 对象的方法内部,是可以 直接访问对象的属性
  2. 同一个类 创建的 多个对象 之间,属性 互不干扰!

在这里插入图片描述

03. 摆放家具

需求

  1. 房子(House)户型总面积家具名称列表
    • 新房子没有任何的家具
  2. 家具(HouseItem)名字占地面积,其中
    • 席梦思(bed) 占地 4 平米
    • 衣柜(chest) 占地 2 平米
    • 餐桌(table) 占地 1.5 平米
  3. 将以上三件 家具 添加房子
  4. 打印房子时,要求输出:户型总面积剩余面积家具名称列表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IPphZ8M0-1627552148426)(media/15006177106970/008_%E6%91%86%E6%94%BE%E5%AE%B6%E5%85%B7.png)]

剩余面积

  1. 在创建房子对象时,定义一个 剩余面积的属性初始值和总面积相等
  2. 当调用 add_item 方法,向房间 添加家具 时,让 剩余面积 -= 家具面积

思考:应该先开发哪一个类?

答案 —— 家具类

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

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)

小结

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

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)

小结

  1. 创建了一个 房子类,使用到 __init____str__ 两个内置方法
  2. 准备了一个 add_item 方法 准备添加家具
  3. 使用 房子类 创建了 一个房子对象
  4. 房子对象 调用了三次 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 方法 将家具添加到房子
  • 面积计算剩余面积家具列表 等处理都被 封装房子类的内部
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python最强知识点整理:面向对象封装案例 的相关文章

随机推荐

  • windows xp 驱动开发(七)WDK源码 UsbSamp例子的编译及使用

    转载请标明是引用于 http blog csdn net chenyujing1234 参考文章 http msdn microsoft com zh cn library windows hardware ff544747 欢迎大家提出意
  • Ubuntu android adb环境变量配置方法AndroidStudio安装教程

    UbuntuT android adb环境变量配置方法 https wenku baidu com view 61d31d4ef6335a8102d276a20029bd64793e6275 html AndroidStudio安装教程 u
  • file_operations 结构体

    file operations 结构体中的成员函数是字符设备驱动程序设计的主体内容 这些函数实际会在应用程序进行 Linux 的 open write read close 等系统调用时最终被调用 file operations 结构体目前
  • 辐射骚扰测试软件,电磁兼容EMC测试

    1 什么是辐射 RE 测试 辐射发射 Radiated Emission 测试是测量EUT通过空间传播的辐射骚扰场强 可以分为磁场辐射 电场辐射 前者针对灯具和电磁炉 后者则应用普遍 另外 家电和电动工具 AV产品的辅助设备有功率辐射发射的
  • JAVA为什么只有一个public_浅谈为什么一个Java源文件中只能有一个public类?

    第一 只有一个public类 浅谈为什么一个java源文件中只能有一个public类 1 每个编译单元 文件 只能有一个public 类 这么做的意思是 每个编译单元只能有一个公开的接口 而这个接口就由其public 类来表示 2 java
  • 20.9.7 项目开发总结报告

    项目开发总结报告 项目总结最后价值的东西是经验 教训的总结 项目开发总结报告的编制 根据GB T 8567 2006的规定 项目总结报告应包含以下几个部分的内容 1 引言 标识 系统概述 文档概述 2 引用文件 引用文档的编号 标题 修改版
  • Coding and Paper Letter(六十四)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 资源整理 1 Coding 1 交互式瓦片编辑器 tile playground 2 R语言包autokeras autokeras的R接口 autokeras是一个开源的
  • aix date 脚本_AIX下取前一天时间

    AIX的默认dtae命令是不支持 d参数的 导致大家写脚本很痛苦 没法简单取得前一天的时间 下面有简单方式可以取得 YESTERDAY TZ aaa24 date Y m d echo YESTERDAY 或者是 bin sh TZ TZ
  • Java基础面试题

    怎么理解栈 堆 堆中存什么 栈中存什么 栈是运行时的单位 而堆是存储的单位 栈解决程序的运行问题 即程序如何执行 或者说如何处理数据 堆解决的是数据存储的问题 即数据怎么放 放在哪儿 堆中存的是对象 栈中存的是基本数据类型和堆中对象的引用
  • docker,nvidia-docker安装

    卸载先前的docker Docker 的旧版本被称为 docker docker io 或 docker engine 如果已安装 请卸载它们 sudo apt get remove docker docker engine docker
  • 操作系统笔记整理11——文件和文件系统

    点此链接可跳转到 操作系统笔记整理 目录索引页 参考书籍 计算机操作系统 第四版 汤小丹等编著 文章目录 点此链接可跳转到 操作系统笔记整理 目录索引页 数据项 记录和文件 数据项 记录 文件 文件系统 对象及其属性 对对象操纵和管理的软件
  • 【SP】SubstancePainter安装相关问题

    SP SubstancePainter安装相关问题 安装成功后主要有两个配置问题 驱动和TDR问题 GPU驱动更新 1 从设备管理器中联网搜索驱动会提示以更新至最新版本等类似话语 因此从官网下载驱动 以1050ti显卡为例 下载地址 英伟达
  • 深度学习和图像识别:使用R语言的深入指南

    目录 深度学习简介 准备工作 数据集 构建模型 训练模型 评估模型 结论
  • unity 实现多个物体或单个物体 让其单击物体让其显示再次单击让其隐藏

    unity 实现单击物体让其显示或隐藏 再次单击显示或隐藏 using System Collections using System Collections Generic using Unity Burst CompilerServic
  • SpringBoot去掉jackson并整合Gson

    SpringBoot去掉jackson并整合Gson
  • 微信公众平台——获取用户信息

    第一次握手 获取code code根据用户随机产生 在网页中缓存 注意这个code并不是微信的id 访问 https open weixin qq com connect oauth2 authorize appid redirect ur
  • ngrok服务实现内网穿透

    自建ngrok服务实现内网穿透 名词解释 内网穿透 又叫NAT穿透 是计算机用语 翻译过来就是你的电脑可以直接被你朋友访问 通常我们的电脑是无法自己被访问的 因为我们的电脑缺少自己的独立的ip地址 现在ip稀缺 电信运营商已经不会随便分配固
  • 对手机制造行业供应链系统的一些需求的情景模拟分析

    手机制造行业供应链系统的一些需求的情景模拟分析 一 关键应用列表 关键应用点 管理诉求简述 终端客户的发运管理 客户代管库的管理 在对大的代理商销售过程中 和代理商签订合同后 需要分批分次发运到代理商的各零售终端去 同时还要对未发运部分进行
  • 超文本标记语言(HyperText Markup Language,简称HTML)

    1 什么是HTML HTML是用来描述网页的一种语言 HTML指的是超文本标记语言 HyperText Markup Language 是一种用于创建网页的标准标记语言 HTML不是一种编程语言 而是一种标记语言 标记语言是一套标记标签 H
  • Python最强知识点整理:面向对象封装案例

    面向对象封装案例 目标 封装 小明爱跑步 存放家具 01 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象 然后 让对象调用方法 对象方法的细节 都被