27 - 面向对象的三大特征 - 封装

一、面向对象的三大特征

二、封装的概念

  • 根据需求将属性和方法封装到一个抽象的类中的过程,就是封装。
  • 外界使用 类 创建对象,然后让对象调用类中的方法。
  • 对象方法的细节都被 封装 在类的内部。

三、封装案例1-小明爱跑步

1、需求

  • 小明 体重 75.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}')
        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)
 

五、封装案例2-登陆

1、需求

  • 进入某web项目登录页面,输入用户名、密码、验证码之后登陆系统。
  • 模拟实现登录操作,输出每一步的登录信息。

2、类的设计

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)



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值