【python实操】python小程序之封装(小明、家具管理)

news2025/1/17 0:01:13

引言

python小程序之封装(小明、家具管理)

文章目录

  • 引言
  • 一、封装(小明)
    • 1.1 题目
    • 1.2 代码
    • 1.3 代码解释
  • 二、封装(家具管理)
    • 2.1 题目
    • 2.2 代码
    • 2.3 代码解释
      • 2.3.1 类 `HouseItem`
      • 2.3.2 类 `House`
      • 2.3.3 实例化与调用
      • 2.3.4 运行结果
  • 四、思考
    • 4.1 封装(小明)
    • 4.2 封装(家具管理)

一、封装(小明)

1.1 题目

小明体重75公斤,每跑一次步会减0.5公斤,每吃一次东西会重0.7公斤

1.2 代码

class Person:
    def __init__(self, name, weight):
        self.name = name
        self.weight = weight

    def __str__(self):
        return f'{self.name}的体重是{self.weight}kg'

    def run(self):
        print(f'{self.name}跑步,体重减少了')
        self.weight -= 0.5

    def eat(self):
        print(f'{self.name}吃东西,体重增加了')
        self.weight += 0.7


xiaoming = Person('小明', 75)
print(xiaoming)

xiaoming.run()
print(xiaoming)

输出结果:
在这里插入图片描述

1.3 代码解释

这段代码定义了一个名为 Person 的类,用于表示一个人的基本信息和体重变化的行为

  1. class Person: 定义了一个名为 Person 的类
  2. def __init__(self, name, weight): 定义了类的构造函数,用于在创建 Person 对象时初始化其属性。self 代表类的实例本身,nameweight 是构造函数的参数
    • self.name = name:将传入的 name 参数赋值给实例属性 name
    • self.weight = weight:将传入的 weight 参数赋值给实例属性 weight
  3. def __str__(self): 定义了类的字符串表示方法,当使用 print() 函数打印 Person 对象时,会调用这个方法
    • return f'{self.name}的体重是{self.weight}kg':返回一个格式化的字符串,显示人的名字和体重
  4. def run(self): 定义了一个名为 run 的方法,用于模拟人跑步时体重减少的行为
    • print(f'{self.name}跑步,体重减少了'):打印出人跑步的信息
    • self.weight -= 0.5:将实例属性 weight 的值减少 0.5
  5. def eat(self): 定义了一个名为 eat 的方法,用于模拟人吃东西时体重增加的行为
    • print(f'{self.name}吃东西,体重增加了'):打印出人吃东西的信息
    • self.weight += 0.7:将实例属性 weight 的值增加 0.7
  6. xiaoming = Person('小明', 75):创建了一个 Person 类的实例,名为 xiaoming,其名字为 “小明”,体重为75kg
  7. print(xiaoming):打印 xiaoming 实例,由于重写了 __str__ 方法,所以会打印出 “小明的体重是75kg”
  8. xiaoming.run():调用 xiaoming 实例的 run 方法,模拟小明跑步,体重减少 0.5kg。
  9. print(xiaoming):再次打印 xiaoming 实例,此时体重变为74.5kg,所以会打印出 “小明的体重是74.5kg”
  10. xiaoming.eat():调用 xiaoming 实例的 eat 方法,模拟小明吃东西,体重增加 0.7kg
  11. print(xiaoming):再次打印 xiaoming 实例,此时体重变为75.2kg,所以会打印出 “小明的体重是75.2kg”

二、封装(家具管理)

2.1 题目

1.房子(House)有户型、总面积和家具名称列表

  • 新房子没有任何的家具

2.家具(Houseltem)有名字和占地面积,其中

  • 席梦思(bed)占地4平米
  • 衣柜(chest)占地2平米
  • 餐桌(table)占地1.5平米

3.将以上三件家具添加到房子中
4.打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表

剩余面积:

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

2.2 代码

class House:
    def __init__(self, htype, tarea):
        self.htype = htype
        self.tarea = tarea
        self.rarea = tarea
        self.list_item = []

    def __str__(self):
        return f'户型:{self.htype},总面积:{self.tarea}平米,剩余面积:{self.rarea}平米,家具列表:{self.list_item}'

    def add_item(self, item):
        if self.rarea >= item.area:
            self.list_item.append(item.name)
            print(f'房子里添加了{item.name},剩余面积减少了')
            self.rarea -= item.area
        else:
            print("家里空间不够了,放不下了")

class HouseItem:
    def __init__(self, name, area):
        self.name = name
        self.area = area

    def __str__(self):
        return f'名字:{self.name},占地面积:{self.area}平米'


bad = HouseItem('席梦思', 4)
# print(bad)
chest = HouseItem('衣柜', 2)
# print(chest)
table = HouseItem('餐桌', 1.5)
# print(table)

home = House('四叶草户型', 7)

home.add_item(bad)
print(home)
home.add_item(chest)
print(home)
home.add_item(table)
print(home)

输出结果:
在这里插入图片描述

2.3 代码解释

这段代码定义了两个类:HouseHouseItem。它们分别用来表示房子和家具

2.3.1 类 HouseItem

  • 属性:
    • name: 家具的名字
    • area: 家具占用的面积
  • 方法:
    • __init__(self, name, area): 构造函数,用于初始化一个新的 HouseItem 对象
    • __str__(self): 返回一个描述该对象的字符串

2.3.2 类 House

  • 属性:
    • htype: 房子的户型
    • tarea: 房子的总面积
    • rarea: 房子剩余可使用的面积,初始时等于总面积
    • list_item: 存储已添加到房子里的家具名字列表
  • 方法:
    • __init__(self, htype, tarea): 构造函数,用于初始化一个新的 House 对象
    • __str__(self): 返回一个描述该房子状态的字符串,包括户型、总面积、剩余面积以及家具列表
    • add_item(self, item): 尝试将给定的 HouseItem 添加到房子中。如果房子有足够的空间(即 rarea 大于或等于 item.area),则更新 rarea 并将家具名称添加到 list_item 中;否则,打印出空间不足的消息

2.3.3 实例化与调用

  • 创建了三个 HouseItem 对象:bad (席梦思),chest (衣柜),table (餐桌)
  • 创建了一个 House 对象 home,其户型为“四叶草户型”,总面积为 7 平米
  • 使用 home.add_item() 方法尝试向 home 添加家具,并在每次添加后打印当前的房子状态

2.3.4 运行结果

  • 当第一次尝试添加 bad (席梦思) 时,由于它的面积是 4 平米,小于 home 的剩余面积 7 平米,所以可以成功添加。这时,home 的剩余面积减少到 3 平米
  • 接着添加 chest (衣柜),面积为 2 平米,仍然小于 home 的剩余面积 3 平米,因此也可以成功添加。此时,home 的剩余面积变为 1 平米
  • 最后尝试添加 table (餐桌),面积为 1.5 平米,但是 home 的剩余面积只有 1 平米,不足以容纳这张餐桌,因此会输出“家里空间不够了,放不下了”

通过这个简单的程序,我们可以看到如何使用面向对象的方法来模拟现实世界中的情况,比如管理房屋内的家具布局

四、思考

4.1 封装(小明)

  • __init__初始化基本信息
  • __str__加上实例的print输出信息
  • run和eat方法变更weight变量
  • 最终达到记录体重变更的目的

4.2 封装(家具管理)

  • House和HouseItem类有各自的属性和方法
  • House类需要HouseItem类中的数据,就需要在House中初始化一个空列表
  • 添加家具方法add_item首先要判断能否添置家具,其次对家具列表、剩余面积进行更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2198822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【中间件】—一篇说明白API网关常用API网关推荐

【中间件】- API网关简介 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记仓库👉https://github.com/A-BigTree/tree-learning-notes 个人主页👉https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 文章目录 【中间件】- API网关简介1 计算…

STM32—SPI通讯协议

前言 由于I2C开漏外加上拉电阻的电路结构,使得通信线高电平的驱动能力比较弱,这就会号致,通信线由候电平变到高电平的时候,这个上升沿耗时比较长,这会限制I2C的最大通信速度, 所以,I2C的标准模…

Sym-NCO:利用对称性进行神经组合优化

文章目录 Abstract1 Introduction2 组合优化马尔可夫决策过程中的对称性2.1 组合马尔可夫决策过程2.2 CO-MDP中的对称性3 对称神经组合优化3.1 通过LSym-RL正则化REINFORCE的问题和解决方案对称性3.2 通过预先识别的对称性学习不变表示: L i n v L_{inv} Linv​4 相关工作5 Ex…

使用LlamaIndex构建RAG

使用LlamaIndex构建RAG 一、什么是LlamaIndex二、环境准备2.1虚拟环境创建及基础安装2.2安装llamaIndex相关2.3下载词向量模型2.4下载NLTK资源2.5准备LLM模型2.6不使用RAG情况下的问答效果2.7使用llama-index的效果2.7.1安装llama-index词嵌入依赖2.7.2获取知识库2.7.3准备代码…

HarmonyOS Next应用开发——抽屉布局SideBarContainer

抽屉布局SideBarContainer 提供侧边栏可以显示和隐藏的侧边栏容器,通过子组件定义侧边栏和内容区,第一个子组件表示侧边栏,第二个子组件表示内容区。 并且侧边栏可以出现在左侧也可以出现在右侧,侧边栏可以并列跟内容区一起展示…

【量化交易、股票预测】MASTER:以市场为导向的股票价格预测变压器

目录 简单概括1 背景知识2 详细方法定义1:股价预测2.1 概述预测2.2 Market-Guided Gating市场状况表示 定义2 :市场导向的股价预测2.3 门机制2.4 Intra-Stock聚合2.5 Inter-Stock聚合2.6 Temporal Aggregation2.7 预测与训练2.8 讨论与现有工作的关系 2.…

大贤3D家谱2025-简单快捷的创建流程

大贤3D家谱2025的创建过程经过优化,确保用户轻松上手。 步骤 1:添加关系节点 启动软件:打开大贤家谱2025-3D。点击添加节点: 从“我”开始,依次构建“兄弟-兄弟-姊妹”,再到“父亲-父亲-父亲”等。每次点…

芯片复位电路-RC复位

芯片复位电路-RC复位 MAX809专门的上电复位芯片使用注意芯片间级联复位 看门狗复位注意事项 MAX809专门的上电复位芯片 可以看到这里VTH这个电压值一般是你你电复位芯片供电的90%左右,比如说5V,那这里可能是4.5V。 使用注意 A.复位输出引脚要加上拉电阻…

【旋转数组】二分法专题

这两天看这个看晕乎了...痛定思痛,必须学会! 讲解寻找旋转排序数组中的最小值寻找旋转排序数组中的最小值II 小总结搜索选择排序数组搜索旋转排序数组II 小总结 讲解 左闭右闭: left 0, right nums.size() - 1 找target 进入while循环&…

低质量数据的多模态融合方法

目录 多模态融合 低质量多模态融合的核心挑战 噪声多模态数据学习 缺失模态插补 平衡多模态融合 动态多模态融合 启发式动态融合 基于注意力的动态融合 不确定性感知动态融合 论文 多模态融合 多模态融合侧重于整合多种模态的信息,以实现更准确的预测,在自动驾驶、…

LeetCode 73 Set Matrix Zeroes 题目解析和python代码

题目: Given an m x n integer matrix matrix, if an element is 0, set its entire row and column to 0’s. You must do it in place. Example 1: Input: matrix [[1,1,1],[1,0,1],[1,1,1]] Output: [[1,0,1],[0,0,0],[1,0,1]] Example 2: Input: matrix …

银河麒麟服务器:检查仓库源连接状态

银河麒麟服务器:检查仓库源连接状态 1. 清理YUM缓存2. 生成YUM缓存 💖The Begin💖点点关注,收藏不迷路💖 在银河麒麟高级服务器操作系统中,要检查仓库源是否连接成功,可以执行以下两个命令&…

探针台的应用领域

探针台(Probe Station)是一种用于对半导体器件进行电性能测试的重要设备。它通常由精密的机械结构、高性能的探针针头和电性能测试仪器组成。探针台可以对半导体芯片、集成电路和其他微电子器件进行直接的电性能测试,从而为研究和生产提供有价…

【华为HCIP实战课程八】OSPF网络类型及报文类型详解,网络工程师

一、点到点网络类型 1、两台路由器 2、支持广播、组播 P2P(PPP、HDLC、帧中继子接口) 我们需要三个维度考虑 A、是否自动通过组播发现邻居 B、时间(Hello和Dead) C、DR和BDR----多点接入网络需要用到(广播和NBMA) 点到点是组播自动发现邻居,Hello 10S,Dead 40S…

新一代文件传输革命:探索超越传统FTP的替代方案

为什么要进行FTP替代? FTP是一种应用特别广泛的文件传输协议,可以实现文件的上传、下载和其他文件操作,因其简单易用、广泛支持、兼容性好、成本低廉的特性,在全球各国都流行了多年,并且延续至今,还有很多…

命令行py脚本——Linux下方便快捷地运行*.py脚本

命令行参数传递,shell批指令和命令别名。 (笔记模板由python脚本于2024年10月08日 12:25:54创建,本篇笔记适合喜欢python和Linux的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣…

Index-1.9B模型部署教程

一、介绍 Index-1.9B 系列是 Index 系列型号的轻量级版本,包含以下型号: Index-1.9B 基础:具有 19 亿个非嵌入参数的基础模型,在 2.8T 主要为中文和英文的语料上进行预训练,在多个评测基准上与同级别模型相比领先。I…

华为OD机试 - 人数最多的站点(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…

知识付费市场的前景 集师小程序 集师知识付费服务 集师知识付费体系

在数字化时代的2020年代中,知识付费市场如同一颗璀璨的新星,正在迅速崛起并改变着人们的学习方式和消费习惯。这一市场的繁荣,不仅得益于互联网技术的飞速发展,更源于人们对高质量、个性化知识内容的强烈需求。 以前知识付费从最初…

MySQL从主库恢复从库

主库备份数据&#xff0c;拷贝至从节点 1.1 备份数据 sudo python /data/apps/xtrabackup/script/xtrabackup.py -m full 备份目录为&#xff1a; /data/mysql_bakcup/<port>/<date>/full_<date> 例&#xff1a;/data/mysql_backup/13306/20231124/full_1640…