python -封装

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

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

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.0)
xiaoming.run()
xiaoming.eat()
#print(xiaoming.weight)
print(xiaoming)


# 同一个类创建出多个对象之间,属性互补干扰的
xiaomei = Person('小美',45.0)
xiaomei.run()
xiaomei.eat()
print(xiaomei)
print(xiaoming)

在这里插入图片描述
需求2:摆放家具
需求:
1.房子有户型,总面积和家具名称列表
新房子没有任何的家具
2.家具有名字和战地面积,其中
床:占4平米
衣柜:占2平面
餐桌:占1.5平米
3.将以上三件家具添加到房子中
4.打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表

分为两类:家具类、房子类
房子类要使用家具,所以被使用的类应先开发

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):
        return ('户型:%s 总面积:%.2f 剩余面积:%.2f 家具列表:%s'
                %(self.house_type,self.area,self.free_area,self.item_list))

    def add_item(self,item):
        # item 就是家具
        # 1.判断家具的面积
        if item.area> self.free_area:
            print('家具面积太大了')
            return
            # 想要if直接结束程序 用return
        # 2.将家具名称添加到列表中
        self.item_list.append(item.name)
        # 3. 计算剩余面积
        self.free_area -= item.area



bed = HouseItem('bed',4)
# print(bed)
chest = HouseItem('chest',2)
table = HouseItem('table',1.5)

a = House('三室两厅',123)
a.add_item(bed)
a.add_item(chest)
a.add_item(table)
print(a)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43067754/article/details/85269866