目标:

  • 封装
  • 案例1:小明爱跑步
  • 案例2:存放家具

01 封装

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

02 小明爱跑步

需求:

  • 小明体重 75.0 公斤
  • 小明每次跑步会减肥 0.5 公斤
  • 小明每次吃东西体重会增加 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):
        self.weight -= 0.5

    def eat(self):
        self.weight += 1

xiaoming = Person("小明",75)

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

xiaomei = Person("小美",45)
xiaomei.eat()
xiaomei.run()

print(xiaomei)

02 摆放家具

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

图片说明

提示:应该先开发哪一个类?应该是家具类。不仅因为家具类简单,更重要的是房子类中要使用到家具类,被使用的类,通常应该先开发

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 \t 总面积:%s \t 剩余面积:%s \n家具:%s"
                 % (self.House_type, self.area,
                 self.free_area, self.item_list))

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


        # 判断要添加的家具面积是否超过剩余面积,如果超过,提示不能添加
        if item.area > self.free_area:
            print("%s的面积过大,无法添加" % item.name)
            return
        # 将家具名称追加到家居名称列表中
        self.item_list.append(item.name)

        # 用房子的剩余面积-添加的家具面积
        self.free_area -= item.area

# 创建家具
bed = HouseItem("席梦思",40)
chest = HouseItem("衣柜",20)
table= HouseItem("餐桌",1.5)

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

# 创建房子
my_home = House("两室一厅",60)
my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)
print(my_home)