目标
- 封装 是面向对象编程的一大特点
- 面向对象编程的 第一步 —— 将 属性 和 方法 封装 到一个抽象的 类 中
- 外界 使用 类 创建 对象,然后 让对象调用方法
-
02. 小明爱跑步
需求
小明 体重
75.0
公斤- 小明每次 跑步 会减肥
0.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):
self.weight -= 0.5
def eat(self):
self.weight += 1
xiaoming = Person("小明", 50)
print(xiaoming)
xiaoming.eat()
print(xiaoming)
xiaoming.eat()
xiaoming.run()
print(xiaoming)
提示:在 对象的方法内部,是可以 直接访问对象的属性 的!
03. 摆放家具
需求
- 房子(House)有户型、总面积和家具名称列表
- 新房子没有任何的家具
- 家具(HouseItem)有名字和占地面积,其中
- 席梦思(bed) 占地
4
平米 - 衣柜(chest) 占地
2
平米 - 餐桌(table) 占地
1.5
平米
- 席梦思(bed) 占地
- 将以上三件 家具 添加 到 房子 中
- 打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
class HouseItem:
def __init__(self, name, area):
self.name = name
self.area = area
def __str__(self):
return "家具名称:%s, 占地:%.2f平方米" % (self.name, self.area)
import HouseItem
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\n总面积:%.2f[剩余面积:%.2f]\n家具名称列表:%s" % (
self.house_type,
self.area,
self.free_area,
self.item_list
)
def add_item(self, item):
"""添加家具(如果剩余空间够的话)
:param item: 被添加的家具
:return: None
"""
print("即将添加家具 %s" % item)
if self.free_area < item.area:
print("剩余面积不足,无法添加")
return
self.item_list.append(item.name)
self.free_area -= item.area
print("添加成功")
# 1. 创建家具
bed = HouseItem.HouseItem("席梦思", 4)
chest = HouseItem.HouseItem("衣柜", 2)
table = HouseItem.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)