引言
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的类,用于表示一个人的基本信息和体重变化的行为
class Person:定义了一个名为Person的类def __init__(self, name, weight):定义了类的构造函数,用于在创建Person对象时初始化其属性。self代表类的实例本身,name和weight是构造函数的参数self.name = name:将传入的name参数赋值给实例属性nameself.weight = weight:将传入的weight参数赋值给实例属性weight
def __str__(self):定义了类的字符串表示方法,当使用print()函数打印Person对象时,会调用这个方法return f'{self.name}的体重是{self.weight}kg':返回一个格式化的字符串,显示人的名字和体重
def run(self):定义了一个名为run的方法,用于模拟人跑步时体重减少的行为print(f'{self.name}跑步,体重减少了'):打印出人跑步的信息self.weight -= 0.5:将实例属性weight的值减少 0.5
def eat(self):定义了一个名为eat的方法,用于模拟人吃东西时体重增加的行为print(f'{self.name}吃东西,体重增加了'):打印出人吃东西的信息self.weight += 0.7:将实例属性weight的值增加 0.7
xiaoming = Person('小明', 75):创建了一个Person类的实例,名为xiaoming,其名字为 “小明”,体重为75kgprint(xiaoming):打印xiaoming实例,由于重写了__str__方法,所以会打印出 “小明的体重是75kg”xiaoming.run():调用xiaoming实例的run方法,模拟小明跑步,体重减少 0.5kg。print(xiaoming):再次打印xiaoming实例,此时体重变为74.5kg,所以会打印出 “小明的体重是74.5kg”xiaoming.eat():调用xiaoming实例的eat方法,模拟小明吃东西,体重增加 0.7kgprint(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 代码解释
这段代码定义了两个类:
House和HouseItem。它们分别用来表示房子和家具
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首先要判断能否添置家具,其次对家具列表、剩余面积进行更新



















