引言
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参数赋值给实例属性- name
- self.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,其名字为 “小明”,体重为75kg
- print(xiaoming):打印- xiaoming实例,由于重写了- __str__方法,所以会打印出 “小明的体重是75kg”
- xiaoming.run():调用- xiaoming实例的- run方法,模拟小明跑步,体重减少 0.5kg。
- print(xiaoming):再次打印- xiaoming实例,此时体重变为74.5kg,所以会打印出 “小明的体重是74.5kg”
- xiaoming.eat():调用- xiaoming实例的- eat方法,模拟小明吃东西,体重增加 0.7kg
- 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 代码解释
这段代码定义了两个类:
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首先要判断能否添置家具,其次对家具列表、剩余面积进行更新



















