3.3面向对象封装案例1摆家具

面向对象封装案例

目标

  • 封装
  • 小明爱跑步
  • 存放家具

01. 封装

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

02. 小明爱跑步

需求

  1. 小明 体重 75.0 公斤
  2. 小明每次 跑步 会减肥 0.5 公斤
  3. 小明每次 吃东西 体重增加 1 公斤

提示:在 对象的方法内部,是可以 直接访问对象的属性 的!

  • 代码实现:

```python class Person: """人类"""

def __init__(self, name, weight):

    self.name = name
    self.weight = weight

def __str__(self):

    return "我的名字叫 %s 体重 %.2f 公斤" % (self.name, self.weight)

def run(self):
    """跑步"""

    print("%s 爱跑步,跑步锻炼身体" % self.name)
    self.weight -= 0.5

def eat(self):
    """吃东西"""

    print("%s 是吃货,吃完这顿再减肥" % self.name)
    self.weight += 1

xiaoming = Person("小明", 75)

xiaoming.run() xiaoming.eat() xiaoming.eat()

print(xiaoming)

```

2.1 小明爱跑步扩展 —— 小美也爱跑步

需求

  1. 小明小美 都爱跑步
  2. 小明 体重 75.0 公斤
  3. 小美 体重 45.0 公斤
  4. 每次 跑步 都会减少 0.5 公斤
  5. 每次 吃东西 都会增加 1 公斤

提示

  1. 对象的方法内部,是可以 直接访问对象的属性
  2. 同一个类 创建的 多个对象 之间,属性 互不干扰!

03. 摆放家具

需求

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

    • 新房子没有任何的家具
  2. 家具(HouseItem)名字占地面积,其中
    • 席梦思(bed) 占地 4 平米
    • 衣柜(chest) 占地 2 平米
    • 餐桌(table) 占地 1.5 平米
  3. 将以上三件 家具 添加房子
  4. 打印房子时,要求输出:户型总面积剩余面积家具名称列表

剩余面积

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

思考:应该先开发哪一个类?

答案 —— 家具类

  1. 家具简单
  2. 房子要使用到家具,被使用的类,通常应该先开发

3.1 创建家具

```python class HouseItem:

def __init__(self, name, area):
    """

    :param name: 家具名称
    :param area: 占地面积
    """
    self.name = name
    self.area = area

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

1. 创建家具

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

print(bed) print(chest) print(table)

```

小结

  1. 创建了一个 家具类,使用到 __init____str__ 两个内置方法
  2. 使用 家具类 创建了 三个家具对象,并且 输出家具信息

3.2 创建房间

```python class House:

def __init__(self, house_type, area):
    """

    :param house_type: 户型
    :param area: 总面积
    """
    self.house_type = house_type
    self.area = area

    # 剩余面积默认和总面积一致
    self.free_area = area
    # 默认没有任何的家具
    self.item_list = []

def __str__(self):

    # Python 能够自动的将一对括号内部的代码连接在一起
    return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"
            % (self.house_type, self.area,
               self.free_area, self.item_list))

def add_item(self, item):

    print("要添加 %s" % item)

...

2. 创建房子对象

my_home = House("两室一厅", 60)

myhome.additem(bed) myhome.additem(chest) myhome.additem(table)

print(my_home) ```

小结

  1. 创建了一个 房子类,使用到 __init____str__ 两个内置方法
  2. 准备了一个 add_item 方法 准备添加家具
  3. 使用 房子类 创建了 一个房子对象
  4. 房子对象 调用了三次 add_item 方法,将 三件家具 以实参传递到 add_item 内部

3.3 添加家具

需求

  • 1> 判断 家具的面积 是否 超过剩余面积如果超过,提示不能添加这件家具
  • 2> 将 家具的名称 追加到 家具名称列表
  • 3> 用 房子的剩余面积 - 家具面积

```python def add_item(self, item):

    print("要添加 %s" % item)
    # 1. 判断家具面积是否大于剩余面积
    if item.area > self.free_area:
        print("%s 的面积太大,不能添加到房子中" % item.name)

        return

    # 2. 将家具的名称追加到名称列表中
    self.item_list.append(item.name)

    # 3. 计算剩余面积
    self.free_area -= item.area

```

3.4 小结

  • 主程序只负责创建 房子 对象和 家具 对象
  • 房子 对象调用 add_item 方法 将家具添加到房子
  • 面积计算剩余面积家具列表 等处理都被 封装房子类的内部

原文地址:https://www.cnblogs.com/huohu121/p/12251854.html

时间: 2024-08-01 17:00:06

3.3面向对象封装案例1摆家具的相关文章

[Python]面向对象封装案例

面向对象封装案例 封装 封装是面向对象编程的一大特点 面向对象编程的第一步 -- 将属性和方法 封装到一个抽象的类中 => 一开始就应该先做需求分析,分析这个类有哪些属性和方法 外界使用类创建对象,然后让对象调用方法 对象方法的细节都被封装在类的内部 => 封装就是把方法,属性都封装在类中,需要的时候使用类的对象直接进行调用即可 小明爱跑步 需求 小明 体重75.0公斤 小明每次跑步会减肥0.5公斤 小明每次吃东西体重会增加1公斤 class Person: # Python的属性是在__in

3.4面向对象封装案例2士兵突击

面向对象封装案例 II 目标 士兵突击案例 身份运算符 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装 在 类的内部 一个对象的 属性 可以是 另外一个类创建的对象 01. 士兵突击 需求 士兵 许三多 有一把 AK47 士兵 可以 开火 枪 能够 发射 子弹 枪 装填 装填子弹 —— 增加子弹数量 1.1 开发枪类 shoot 方法需求 1> 判断是

Python面向对象封装案例

01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装 在 类的内部 02. 小明爱跑步 需求 小明 体重 75.0 公斤 小明每次 跑步 会减肥 0.5 公斤 小明每次 吃东西 体重增加 1 公斤 注意: 在 对象的方法内部,是可以 直接访问对象的属性 的! class Person: def __init__(self,name,weight):

面向对象封装案例 二

封装 1.封装是面向对象编程的一大特点 2.面向对象编程的第一步 -- 将属性和方法封装到一个抽象的类中 3.外界使用类创建对象,然后让对象调用方法 4.对象方法的细节都被封装在类的内部 一个对象的属性可以是另一个类创建的对象 01.士兵突击 需求 1.士兵 许三多 有一把AK47 2.士兵可以开火 3.枪能够发射子弹 4.枪装填子弹 -- 增加子弹数量 class Gun: def __init__(self,modle): # 1.枪的型号 self.model = modle # 2.子弹

python面向对象封装

# 面向对象封装案例:为新房子增添家具# 分析对象的属性# 房子属性:户型.面积 # 家具属性: 家具名称.占地面积 class Furniture: def __init__(self, name, area): self.name = name self.area = area def __str__(self): return F"[{self.name}]占地面积{self.area}平方米" class House: def __init__(self, house_type

面向对象封装、继承、多态

一.面向对象封装 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装 在 类的内部 02. 小明跑步案例 需求: 小明 体重 50公斤 小明每次 跑步 会减肥 1公斤 小明每次 吃东西 体重增加 0.5 公斤 class Person(object): def __init__(self, name, weight): self.name = na

python学习 面向对象封装

from collectoins import namedtuplePoint=namedtuple('point',['x','y'])t1=Point(1,2)print(t1.x)print(t1.y)没有方法的类属性不会发生变化    定义简单 不能改变面向对象封装私有属性!!!私有方法!!!用装饰器描述的几个方法@property !!!@classmethod!!@staticmethod! 封装:class Teacher:     def __init__(self,name,p

OC面向对象封装

OC面向对象封装 一.面向对象和封装 面向对象的三大特性:封装(成员变量),继承,多态 在OC语言中,使用@interface和@implementation来处理类. @interface就好像暴露在外面的时钟表面,像外界提供展示以及接口,@implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来. 二.Set方法 在研发过程中,考虑到安全性要求,我们一般不在成员变量名前面使用@public,@protected等关键字修饰,而是使用Set方法来为对象提供成员变量值,

面向对象 封装 、继承

构造函数: 构造函数 - 创建一个类的函数 每一个类都有构造函数,访问修饰符必须是public的,并且不需要写任何返回值,方法名与类名一致 自己写的类 - 用户自定义类型如果要使用自定义类型产生出来的  对象  必须有一个实例化的过程 实例化格式:类型名  ss = new 构造函数(); 访问修饰符 -  4个 public - 公共的,任何地方都可以访问,但是需要引用 命名空间 private - 私有的,类的内部才可以访问 internal - 内部的,默认的,程序集中可以访问,程序集就是