• Python 面向对象 --- 封装案例


    目标

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

    01,封装

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

    02,小明爱跑步

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

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

    
        class Person:
        
            def __init__(self, name, weight):
                # self.属性 = 形参
                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.0)
        
        xiaoming.run()
        xiaoming.eat()
        
        print(xiaoming)
        
        # 结果呈现
        小明 爱跑步,跑掉卡路里
        小明 是吃货,吃完再减肥
        小明 的体重是 75.50 公斤
    
    

    2.1 小明爱跑步扩展 --- 小妹也爱跑步

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

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

    
        class Person:
        
            def __init__(self, name, weight):
                # self.属性 = 形参
                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.0)
        
        xiaoming.run()
        xiaoming.eat()
        
        print(xiaoming)
        
        xiaomei = Person("小美", 45.0)
        
        xiaomei.run()
        xiaomei.eat()
        
        print(xiaomei)
        
        # 结果呈现
        小明 爱跑步,跑掉卡路里
        小明 是吃货,吃完再减肥
        小明 的体重是 75.50 公斤
        小美 爱跑步,跑掉卡路里
        小美 是吃货,吃完再减肥
        小美 的体重是 45.50 公斤
    
    

    03,摆放家具

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

        ![](https://images2018.cnblogs.com/blog/1306461/201808/1306461-20180821105020680-169281361.png)
    

    剩余面积

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

    思考:应该先开发哪一类
    答案 --- 家具类
    1,家具简单
    2,房子要使用到家具, 被使用的类,通常应该先开发

    
        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, house_type, area):
                self.house_type = house_type
                self.area = area
        
                # 剩余面积
                self.free_are = area
        
                # 家具名称列表
                self.item_list = []
        
            def __str__(self):
                return ("户型:%s
    总面积:%.2f[剩余:%.2f]
    家具:%s"
                        % (self.house_type, self.area, self.free_are, self.item_list))
            def add_item(self, item):
                print("要添加 %s" % item)
        
        
        
        
        # 1. 创建家具
        bed = HouseItem("席美思", 4)
        wardrobe = HouseItem("衣柜", 2)
        table = HouseItem("餐桌", 1.5)
        
        print("%s 
    %s 
    %s" % (bed, wardrobe, table))
        
        #
        my_home = House("两室一厅", 90)
        
        my_home.add_item(bed)
        my_home.add_item(wardrobe)
        my_home.add_item(table)
        print(my_home)
        
        # 结果呈现
        [席美思] 占地 4.00 平米 
        [衣柜] 占地 2.00 平米 
        [餐桌] 占地 1.50 平米
        要添加 [席美思] 占地 4.00 平米
        要添加 [衣柜] 占地 2.00 平米
        要添加 [餐桌] 占地 1.50 平米
        户型:两室一厅
        总面积:90.00[剩余:90.00]
        家具:[]
    
    

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

    3.3 添加家具

    需求

    • 1>判断 家具的面积 是否 超过剩余面积,如果超过,提示不能添加这件家具
    • 2>将 家具的名称 追加到 家具名称列表
    • 3>用 房子的剩余面积 - 家具面积
    
        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, house_type, area):
                self.house_type = house_type
                self.area = area
        
                # 剩余面积
                self.free_are = area
        
                # 家具名称列表
                self.item_list = []
        
            def __str__(self):
                return ("户型:%s
    总面积:%.2f[剩余:%.2f]
    家具:%s"
                        % (self.house_type, self.area, self.free_are, self.item_list))
            def add_item(self, item):
                print("要添加 %s" % item)
        
                # 1.判断家具面积是否大于剩余面积
                if item.area > self.free_are:
                    print("%s 的面积太大,不能添加到房子中" % item.name)
        
                # 2.将家具的名称追加到名称列表中
                self.item_list.append(item.name)
        
                # 3.计算剩余面积
                self.free_are -= item.area
        
        
        # 1. 创建家具
        bed = HouseItem("席美思", 50)
        wardrobe = HouseItem("衣柜", 30)
        table = HouseItem("餐桌", 20)
        
        print("%s 
    %s 
    %s" % (bed, wardrobe, table))
        
        # 2,创建房子
        my_home = House("两室一厅", 90)
        
        my_home.add_item(bed)
        my_home.add_item(wardrobe)
        my_home.add_item(table)
        print(my_home)
        
        # 结果呈现
        [席美思] 占地 50.00 平米 
        [衣柜] 占地 30.00 平米 
        [餐桌] 占地 20.00 平米
        要添加 [席美思] 占地 50.00 平米
        要添加 [衣柜] 占地 30.00 平米
        要添加 [餐桌] 占地 20.00 平米
        餐桌 的面积太大,不能添加到房子中
        户型:两室一厅
        总面积:90.00[剩余:-10.00]
        家具:['席美思', '衣柜', '餐桌']
    
    

    小结

    • 主程序只负责创建 房子 对象和 家具 对象
    • 房子 对象调用 add_item 方法 将家具添加到房子
    • 面积计算、剩余面积、家具列表 等处理都被 封装房子类的内部
  • 相关阅读:
    VMDNAMD命令规则(转载)
    VMD的相关命令(转载)
    Clayff力场(转载)
    如何处理遇到的错误-lammps
    数据分析及结果
    了解vue里的Runtime Only和Runtime+Compiler
    实例的属性和方法
    组件通信精髓
    vue内置的标签(组件)
    class和style属性
  • 原文地址:https://www.cnblogs.com/xiaoqshuo/p/9507587.html
Copyright © 2020-2023  润新知