面向对象封装案例
Posted chx-python
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象封装案例相关的知识,希望对你有一定的参考价值。
01.封装
1.封装 是面向对象编程的一大特点 2.面向对象编程的第一步 —— 将属性和方法封装到一个抽象的类中 3.外界使用类创建对象,然后让对象调用方法 4.对象方法的细节 都被封装在类的内部
02.小明爱跑步
需求 1.小明体重 75.0 公斤 2.小明每次跑步会减肥 0.5 公斤 3.小明每次吃东西体重增加 1 公斤 Person ------------------- name weight -------------------
_init_(self,name,weight):
_str_(self):
run(self):
eat(self):
-------------------
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): 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)
2.1 小明爱跑步扩展 —— 小美也爱跑步
需求 1.小明和小美都爱跑步 2.小明体重 75.0 公斤 3.小美体重 45.0 公斤 4.每次跑步都会减少 0.5 公斤 5.每次吃东西都会增加 1 公斤
提示
1.在对象的方法内部,是可以直接访问对象的属性的
2.同一类创建的多个对象之间,属性互不干扰!
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): 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) # 小美爱跑步 xiaomei = Person("小美",45) xiaomei.eat() xiaomei.run() print(xiaomei)
03.摆放家具
需求 1.房子(House)有户型,总面积和家居名称列表 新房子没有任何家具 2.家具(HouseItem)有名字和占地面积,其中 席梦思(bed)占地 4 平米 衣柜(chest)占地 2 平米 餐桌(table)占地 1.5平米 3.将以三件家具添加到房子中 4.打印房子时,要求输出:户型、总面积、剩余面积、家居名称列表
剩余面积 1.在创建房子对象时,定义一个剩余面积的属性、初始值和总面积相等 2.当调用 add_item 方法,向房间添加家具时,让剩余面积 -= 家具面积
应该先开发 家具类
1.家具简单
2.房子要使用到家具,被使用的类,通常应该先开发
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 总面积:%.2f[剩余:%.2f] 家具:%s" %(self.house_type,self.area, self.free_area,self.item_list)) def add_item(self,item): print("要添加 %s" % item) # 1.创建家具 bed = HouseItem("席梦思",4) chest = HouseItem("衣柜",2) table = 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)
小结 1.创建了一个房子类,使用到_init_和_str_两个内置方法 2.准备了一个 add_item 方法准备添加家居 3.使用房子类创建了一个房子对象 4.让房子对象调用了三次 add_item 方法,将三件家居以实参传递到 add_item内部
3.3 添加家具
需求 1>判断家具的面积是否超过剩余面积,如果超过,提示不能添加这件家居 2>将家具的名称追加到家居名称列表中 3>用房子的剩余面积 * 家具面积
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 总面积:%.2f[剩余:%.2f] 家具:%s" %(self.house_type,self.area, self.free_area,self.item_list)) def add_item(self,item): print("要添加 %s" % item) # 1.判断家具的面积 if item.area > self.free_area: print("%s 的面积太大了,无法添加" % item.name) return # 2.将家具的名称添加到列表中 self.item_list.append(item.name) # 3.计算剩余面积 self.free_area -= item.area # 1.创建家具 bed = HouseItem("席梦思",4) chest = HouseItem("衣柜",2) table = 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)
3.4 小结
主程序只负责创建房子对象和加剧对象
让房子对象调用 add_item方法将家具添加到房子中
面积计算、剩余面积、家具列表等处理都被封装到房子类的内部
以上是关于面向对象封装案例的主要内容,如果未能解决你的问题,请参考以下文章