面向对象(Python):学习笔记之封装

封装

  1. 封装是面向对象编程的一大特点
  2. 面向对象编程的第一步——将属性和方法封装到一个抽象的类中
  3. 外界使用类创建对象,然后让对象调用方法
  4. 对象方法的细节都被封装在类的内部
  5. 一个对象的属性,可以是另一个类创建的对象

案例一:小明爱跑步

需求:

  1. 小明体重75.0公斤
  2. 小明每次跑步减肥0.5公斤
  3. 小明每次吃东西增加1公斤
Person
属性name
weight
方法__init__(self, name, weight):
__str__(self):
run(self):
ear(self):
class Person:
    def __init__(self, name, weight):
        self.name = name
        self.weight = weight

    def __str__(self):
        return "我的名字叫%s,我的体重是:%.2f" % (self.name, self.weight)

    def eat(self):
        print("%s 吃了一顿饭" % self.name)
        self.weight += 1

    def run(self):
        print("%s 围着操场跑了几圈 " % self.name)
        self.weight -= 0.5


ming = Person(name="小明", weight=75.0)
ming.eat()
ming.run()
ming.eat()
ming.run()
ming.run()
print(ming)

运行结果:
在这里插入图片描述

案例二:小明爱跑步扩展—小美也爱跑步

需求:

  1. 小明和小美都爱跑步
  2. 小明体重75.0公斤
  3. 小妹体重45.0公斤
  4. 每次跑步都会减少0.5公斤
  5. 每次吃东西都会增加1公斤
person
属性name
weight
方法__init__(self, name, weight):
__str__(self):
run(self):
ear(self):

提示:

  1. 在对象的方法内部,是可以直接访问对象的属性的
  2. 同一个类创建多个对象之间,属性互不干扰
class Person:
    def __init__(self, name, weight):
        self.name = name
        self.weight = weight

    def __str__(self):
        return "我的名字叫%s,我的体重是:%.2f" % (self.name, self.weight)

    def eat(self):
        print("%s 吃了一顿饭" % self.name)
        self.weight += 1

    def run(self):
        print("%s 围着操场跑了几圈 " % self.name)
        self.weight -= 0.5


ming = Person(name="小明", weight=75.0)
ming.run()
ming.eat()
print(ming)
mei = Person(name="小美", weight=45.0)
mei.eat()
mei.run()
print(mei)
print(ming)

运行结果:
在这里插入图片描述

案例三:摆放家具

需求:

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

  • 新房子没有任何的加据
    2.家具(HouseItem)有名字和占地面积,其中
  • 席梦思(bed) 占地4平米
  • 衣柜(chest) 占地2平米
  • 餐桌(table) 占地1.5平米

3.将以上三件加据添加到房子里

4.打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表

House
属性houst_type
area
free_area
item
方法__init__(self, house_type, area):
__str__(self):
add_item(self, item) :
HouseItem
属性name
area
方法__init__(self, name, area):
__str__(self):

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

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

    def __str__(self):
        return "%s的占地面积为%.2f" % (self.name, self.area)


class House:

    def __init__(self, layout, all_area):
        self.layout = layout
        self.all_area = all_area
        self.remain_area = all_area
        self.item = []

    def __str__(self):
        return "这是一个%s的房子,总面积为%.2f,有家具%s,剩余面积为%.2f" \
               % (self.layout, self.all_area,
                  '、'.join(self.item), self.remain_area)

    def add_item(self, item):
        if item.area > self.remain_area:
            print(" 剩余面积不足,%s无法添加" % item.name)
            return
        else:
            self.item.append(item.name)
            self.remain_area -= item.area


bed = HouseItem(name="席梦思", area=4)
chest = HouseItem(name="衣柜", area=2)
table = HouseItem(name="餐桌", area=1.5)

house = House(layout="三室两厅", all_area=90)
house.add_item(bed)
house.add_item(chest)
house.add_item(table)
print(house)

运行结果:

在这里插入图片描述

案例四:士兵突击

需求:

  1. 士兵许三多有一把AK47
  2. 士兵可以开火
  3. 枪能够发射子弹
  4. 强能够装填子弹——增加子弹数量
Soldier
属性name
gun
方法__init(self)__
fire(self)
Gun
属性model
bullet_count
方法__init__(self, model)
add_bullet(self, count)
shoot(self)
class Gun:
    def __init__(self, model):
        # 枪的型号
        self.model = model
        # 子弹的数量
        self.bullet_count = 0

    def add_bullet(self, count):
        # 上弹
        self.bullet_count += count

    def shoot(self):
        # 判断有无子弹
        if self.bullet_count <= 0:
            print("%s 没有子弹了..." % self.model)
            return
        # 发射子弹
        self.bullet_count -= 1
        # 提示发射信息
        print("%s 突突突... 剩余子弹为:%d" % (self.model, self.bullet_count))


class Soldier:
    def __init__(self, name):
        # 假设新兵没有枪,可以用None初始化gun
        self.gun is None
        self.name = name

    def fire(self):
        # 判断士兵是否有枪
        if self.gun == 0:
            print("%s的还没有枪!!!" % self.name)
            return
        # 高喊口含
        print("冲啊!!")
        # 装弹
        self.gun.add_bullet(30)
        # 射击
        self.gun.shoot()


# 定义枪对象
ak47 = Gun("AK47")
# 定义士兵对象
xsd = Soldier("许三多")
xsd.gun = ak47
print(xsd.gun)
xsd.fire()

执行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiSarH

如果觉得文章不错,可以支持下~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值