面向对象封装案例

Posted chx-python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象封装案例相关的知识,希望对你有一定的参考价值。

01.封装

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

02.小明爱跑步

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

    Person
-------------------
name  weight
-------------------
_init_(self,name,weight):
_str_(self):
run(self):
eat(self):
-------------------
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)

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)

xiaomei.eat()
xiaomei.run()

print(xiaomei)

 

03.摆放家具

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

技术分享图片

剩余面积
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_area = area

        # 家居名称列表
        self.item_list = []

    def __str__(self):

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

    def add_item(self,item):
        print("要添加 %s" % item)

# 1.创建家具
bed = HouseItem("席梦思",4)
chest = HouseItem("衣柜",2)
table = HouseItem("餐桌",1.5)

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

# 2.创建房子对象
my_home = House("两室一厅",60)

my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)

print(my_home)
小结
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_area = area

        # 家居名称列表
        self.item_list = []

    def __str__(self):

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

    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

# 1.创建家具
bed = HouseItem("席梦思",4)
chest = HouseItem("衣柜",2)
table = HouseItem("餐桌",1.5)

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

# 2.创建房子对象
my_home = House("两室一厅",60)

my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)

print(my_home)

3.4 小结

主程序只负责创建房子对象和加剧对象

让房子对象调用 add_item方法将家具添加到房子中

面积计算、剩余面积、家具列表等处理都被封装到房子类的内部

 












以上是关于面向对象封装案例的主要内容,如果未能解决你的问题,请参考以下文章

[Python]面向对象封装案例

Python面向对象封装案例

python面向对象封装案例2

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

面向对象封装案例

Python面向对象封装案例