目标:
- 封装
- 案例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)


京公网安备 11010502036488号