目录
一、面向对象的三大特征
![](https://i-blog.csdnimg.cn/blog_migrate/2522ea0aabf78f62082abf95db6178d0.png)
二、封装的概念
- 根据需求将属性和方法封装到一个抽象的类中的过程,就是封装。
- 外界使用 类 创建对象,然后让对象调用类中的方法。
- 对象方法的细节都被 封装 在类的内部。
三、封装案例1-小明爱跑步
1、需求
- 小明 体重 75.0 公斤;
- 小明每次 跑步 会减肥 0.5公斤;
- 小明每次 吃东西 体重增加一公斤。
2、类的设计
![](https://i-blog.csdnimg.cn/blog_migrate/fec57617f47b4f8bc97be6ea5037ff65.png)
3、代码实现
# 封装案例一:小明爱跑步
class Person:
def __init__(self,name,weight):
self.name = name
self.weight = weight
def run(self):
print(f'{self.name}当下体重是{self.weight}')
print(f'{self.name}爱跑步,跑步锻炼身体!')
self.weight -= 0.5
print(f'{self.name}这次跑完步的体重是{self.weight}')
def eat(self):
print(f'{self.name}吃了很多东西...')
self.weight +=1
def __str__(self):
return f"我的名字叫{self.name},体重是{self.weight}"
xiaoming = Person('小明',75)
xiaoming.run()
xiaoming.eat()
print(xiaoming)
四、封装案例1扩展-小明爱跑步,小美也爱跑步
1、需求
- 小明 和 小美 都爱跑步;
- 小明 体重 75.0 公斤;
- 小美 体重 45.0 公斤;
- 每次 跑步 会减肥 0.5公斤;
- 每次 吃东西 体重增加一公斤。
2、注意
- 同一个类 创建的多个对象之间,属性 互不干扰。
3、代码实现
# 封装案例一:小明爱跑步
class Person:
def __init__(self, name, weight):
self.name = name
self.weight = weight
def run(self):
print(f'{self.name}爱跑步,跑步锻炼身体!')
self.weight -= 0.5
def eat(self):
print(f'{self.name}吃了很多东西...')
self.weight += 1
def __str__(self):
return f"我的名字叫{self.name},体重是{self.weight}"
"""
同一个类 创建的多个属性之间 互不干扰
"""
xiaoming = Person('小明', 75)
xiaoming.run()
xiaoming.eat()
print(xiaoming)
print("\n")
xiaomei = Person('小美', 45)
xiaomei.run()
xiaomei.eat()
print(xiaomei)
![](https://i-blog.csdnimg.cn/blog_migrate/c59052f310390453086d877cc8edcfa1.png)
五、封装案例2-登陆
1、需求
-
进入某web项目登录页面,输入用户名、密码、验证码之后登陆系统。
-
模拟实现登录操作,输出每一步的登录信息。
2、类的设计
![](https://i-blog.csdnimg.cn/blog_migrate/76c0c1816f53e4a68a64753410b247e9.png)
3、代码实现
# 封装案例2-登陆
class LoginPage:
def __init__(self,username,password,verify_code):
self.username = username
self.password = password
self.verify_code = verify_code
def login(self):
print(f'请输入用户名:{self.username}')
print(f'请输入密码:{self.password}')
print(f"请输入验证码:{self.verify_code}")
print(f'点击登录按钮')
login_page = LoginPage('admin','admin','123456')
login_page.login()
六、封装案例3-摆放家具
1、需求
-
房子(House)有户型、总面积 和 家具名称列表。
-新房子没有任何家具。
-
家具(HouseItem)有 名字 和占地面积,其中
-席梦思(bed)占地 4 平米
-衣柜(chest)占地 2 平米
-餐桌(table)占地 1.5平米
-
将以上三件 家具添加 到 房子 中
-
打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表。
2、类的设计
3、剩余面积
-
在创建房子对象时,定义一个剩余面积的属性(house_free_area),初始值与房屋总面积(house_total_area)相等。
-
当调用add_item(self)方法,向房间 添加家具时,剩余面积=房屋总面积-家具面积。
4、代码实现
# 家具类
class HouseItem:
def __init__(self,item_name,item_area):
self.item_name = item_name #家具名字
self.item_area = item_area #家具面积
def __str__(self):
return f'{self.item_name}占地{self.item_area}平米'
# 房子类
class House:
def __init__(self,house_type,area):
self.house_type = house_type #房屋类型
self.house_total_area = area #房屋总面积
self.house_free_area = area #初始房屋剩余面积等于房屋总面积
self.item_name_list = [] #房屋中的家具列表,刚开始没有家具
def __str__(self):
return f'户型:{self.house_type},总面积:{self.house_total_area}平米,剩余面积:{self.house_free_area}平米,家具列表:{self.item_name_list}'
"""
self:房子对象
item:家具对象(传参)
"""
def add_item(self,item):
# 1.先判断房子的剩余面积和家具的占地面积的关系
if self.house_free_area > item.item_area:
print(f'添加家具:{item.item_area}')
# 2.将家具对象中的家具名称添加到房子对象的家具列表中
self.item_name_list.append(item.item_name)
# 3.修改房屋剩余面积
self.house_free_area -= item.item_area
else:
print(f'房屋剩余面积不足,换大房子吧~~~')
# 创建家具对象
bed = HouseItem('席梦思',4)
chest = HouseItem('衣柜',2)
table = HouseItem('餐桌',1.5)
# 创建房子对象
house = House('三室一厅',100)
print(house)
house.add_item(bed)
print(house)
house.add_item(chest)
print(house)
house.add_item(table)
print(house)