面向对象(Python):学习笔记之封装
发布日期:2021-06-30 15:42:36
浏览次数:3
分类:技术文章
本文共 3967 字,大约阅读时间需要 13 分钟。
封装
- 封装是面向对象编程的一大特点
- 面向对象编程的第一步——将属性和方法封装到一个抽象的类中
- 外界使用类创建对象,然后让对象调用方法
- 对象方法的细节都被封装在类的内部
- 一个对象的属性,可以是另一个类创建的对象
案例一:小明爱跑步
需求:
- 小明体重75.0公斤
- 小明每次跑步减肥0.5公斤
- 小明每次吃东西增加1公斤
类 | Person |
---|---|
属性 | nameweight |
方法 | __init__(self, name, weight):__str__(self):run(self):ear(self): |
class Person: def __init__(self, name, weight): self.name = name self.weight = weight def __str__(self): return "我的名字叫%s,我的体重是:%.2f" % (self.name, self.weight) def eat(self): print("%s 吃了一顿饭" % self.name) self.weight += 1 def run(self): print("%s 围着操场跑了几圈 " % self.name) self.weight -= 0.5ming = Person(name="小明", weight=75.0)ming.eat()ming.run()ming.eat()ming.run()ming.run()print(ming)
运行结果:
案例二:小明爱跑步扩展—小美也爱跑步
需求:
- 小明和小美都爱跑步
- 小明体重75.0公斤
- 小妹体重45.0公斤
- 每次跑步都会减少0.5公斤
- 每次吃东西都会增加1公斤
类 | person |
---|---|
属性 | nameweight |
方法 | __init__(self, name, weight):__str__(self):run(self):ear(self): |
提示:
- 在对象的方法内部,是可以直接访问对象的属性的
- 同一个类创建多个对象之间,属性互不干扰
class Person: def __init__(self, name, weight): self.name = name self.weight = weight def __str__(self): return "我的名字叫%s,我的体重是:%.2f" % (self.name, self.weight) def eat(self): print("%s 吃了一顿饭" % self.name) self.weight += 1 def run(self): print("%s 围着操场跑了几圈 " % self.name) self.weight -= 0.5ming = Person(name="小明", weight=75.0)ming.run()ming.eat()print(ming)mei = Person(name="小美", weight=45.0)mei.eat()mei.run()print(mei)print(ming)
运行结果:
案例三:摆放家具
需求:
1.房子(House)有户型、总面积 和 家具名称列表
- 新房子没有任何的加据 2.家具(HouseItem)有名字和占地面积,其中
- 席梦思(bed) 占地4平米
- 衣柜(chest) 占地2平米
- 餐桌(table) 占地1.5平米
3.将以上三件加据添加到房子里
4.打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
类 | House |
---|---|
属性 | houst_typeareafree_areaitem |
方法 | __init__(self, house_type, area):__str__(self):add_item(self, item) : |
类 | HouseItem |
---|---|
属性 | namearea |
方法 | __init__(self, name, area):__str__(self): |
剩余面积:
1.在创建房子对象时,定义一个剩余面积的属性,初始值和总面积相等 2.在调用add_item方法,向房间添加家具时候,让剩余面积 -= 家具面积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, layout, all_area): self.layout = layout self.all_area = all_area self.remain_area = all_area self.item = [] def __str__(self): return "这是一个%s的房子,总面积为%.2f,有家具%s,剩余面积为%.2f" \ % (self.layout, self.all_area, '、'.join(self.item), self.remain_area) def add_item(self, item): if item.area > self.remain_area: print(" 剩余面积不足,%s无法添加" % item.name) return else: self.item.append(item.name) self.remain_area -= item.areabed = HouseItem(name="席梦思", area=4)chest = HouseItem(name="衣柜", area=2)table = HouseItem(name="餐桌", area=1.5)house = House(layout="三室两厅", all_area=90)house.add_item(bed)house.add_item(chest)house.add_item(table)print(house)
运行结果:
案例四:士兵突击
需求:
- 士兵许三多有一把AK47
- 士兵可以开火
- 枪能够发射子弹
- 强能够装填子弹——增加子弹数量
类 | Soldier |
---|---|
属性 | namegun |
方法 | __init(self)__fire(self) |
类 | Gun |
---|---|
属性 | modelbullet_count |
方法 | __init__(self, model)add_bullet(self, count)shoot(self) |
class Gun: def __init__(self, model): # 枪的型号 self.model = model # 子弹的数量 self.bullet_count = 0 def add_bullet(self, count): # 上弹 self.bullet_count += count def shoot(self): # 判断有无子弹 if self.bullet_count <= 0: print("%s 没有子弹了..." % self.model) return # 发射子弹 self.bullet_count -= 1 # 提示发射信息 print("%s 突突突... 剩余子弹为:%d" % (self.model, self.bullet_count))class Soldier: def __init__(self, name): # 假设新兵没有枪,可以用None初始化gun self.gun is None self.name = name def fire(self): # 判断士兵是否有枪 if self.gun == 0: print("%s的还没有枪!!!" % self.name) return # 高喊口含 print("冲啊!!") # 装弹 self.gun.add_bullet(30) # 射击 self.gun.shoot()# 定义枪对象ak47 = Gun("AK47")# 定义士兵对象xsd = Soldier("许三多")xsd.gun = ak47print(xsd.gun)xsd.fire()
执行结果:
转载地址:https://kaisarh.blog.csdn.net/article/details/103040509 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月29日 12时38分00秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux软件万花筒
2019-05-01
全球开源软件发展趋势分析
2019-05-01
Linux常用的安全工具
2019-05-01
python 多进程之进程池的操作
2019-05-01
flask整理之 flask程序中的debug模式
2019-05-01
比特币,父母这一辈能接受吗?
2019-05-01
为什么要反对比特币,这不代表是空气币
2019-05-01
SnapEx的新感觉,对新手很友好
2019-05-01
首个聚合器怎么产生的,并运用领域在什么
2019-05-01
区块链技术应用,最先医疗行业
2019-05-01
新币上市旧币会降价吗
2019-05-01
跨市场套利怎么处理
2019-05-01
当博士进入币圈会怎么样
2019-05-01
以太坊技术分解
2019-05-01
以太坊技术怎么提供安全性
2019-05-01
如何验证以太坊技术安全性
2019-05-01
数字货币的投资正确之路
2019-05-01
委员会怎么验证比特币真伪
2019-05-01
迅雷陷入窘迫,但是无可替代
2019-05-01