面向对象封装案例房子
需求
房子(House) 有 户型、总面积 和 家具名称列表 新房子没有任何的家具 家具(HouseItem) 有 名字 和 占地面积,其中 席梦思(bed) 占地 4 平米 衣柜(chest) 占地 2 平米 餐桌(table) 占地 1.5 平米 将以上三件 家具 添加 到 房子 中 打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
剩余面积
在创建房子对象时,定义一个 剩余面积的属性,初始值和总面积相等 当调用 add_item 方法,向房间 添加家具 时,让 剩余面积 -= 家具面积 思考:应该先开发哪一个类?
答案 —— 家具类
家具简单 房子要使用到家具,被使用的类,通常应该先开发
先分类 去定义 先创建那个被需要的
创建家具
class Jiaju:
def __init__(self,name,mianji):
self.name = name
self.mianji = mianji
创建了一个 家具类,使用到 init 使用 家具类 创建了 三个家具对象,并且 输出家具信息
创建房子
class Fangzi:
def __init__(self,huxing,fmianji):
self.huxing = huxing
self.fmianji = fmianji
self.jiaju = []
self.symj = self.fmianji
def add_jj(self,kk):
print("添加%s 到房子内" % kk.name)
self.symj -= kk.mianji
self.jiaju.append(kk.name)
def __str__(self):
return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s" %
(self.huxing,
self.fmianji,
self.symj,
self.jiaju))
定义值
dabieye = Fangzi("八室八厅",1000)
ximengsi = Jiaju("席梦思",4)
yigui = Jiaju("衣柜",2)
canzhuo = Jiaju("餐桌",4)
dabieye.add_jj(ximengsi)
dabieye.add_jj(yigui)
print(dabieye)
运行结果
完整代码
class Fangzi:
def __init__(self,huxing,fmianji):
self.huxing = huxing
self.fmianji = fmianji
self.jiaju = []
self.symj = self.fmianji
def add_jj(self,kk):
print("添加%s 到房子内" % kk.name)
self.symj -= kk.mianji
self.jiaju.append(kk.name)
def __str__(self):
return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s" %
(self.huxing,
self.fmianji,
self.symj,
self.jiaju))
class Jiaju:
def __init__(self,name,mianji):
self.name = name
self.mianji = mianji
dabieye = Fangzi("八室八厅",1000)
ximengsi = Jiaju("席梦思",4)
yigui = Jiaju("衣柜",2)
canzhuo = Jiaju("餐桌",4)
dabieye.add_jj(ximengsi)
dabieye.add_jj(yigui)
print(dabieye)
3.4 小结 主程序只负责创建 房子 对象和 家具 对象 让 房子 对象调用 add_item 方法 将家具添加到房子中 面积计算、剩余面积、家具列表 等处理都被 封装 到 房子类的内部
|