面向对象(Python):学习笔记之封装
发布日期:2021-06-30 15:42:36
浏览次数:2
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月15日 04时27分58秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
WiFi强力信号连接方案
2019-05-01
连锁门店无线通信方案
2019-05-01
ATM终端无线方案
2019-05-01
配置Lotus Domino集群视频详解
2019-05-01
Cisco PIX防火墙PPPoE拨号配置视频教学
2019-05-01
通过PXE安装Linux实况
2019-05-01
Linux / Windows应用方案不完全对照表
2019-05-01
Cisco交换机SPAN&RSPAN调试实录
2019-05-01
轻松掌握Ubuntu Linux的3D桌面快捷键使用
2019-05-01
通过视频展示如何通过Samba配置PDC
2019-05-01
OSSIM(开源安全信息管理系统)在企业网络管理中的应用
2019-05-01
网站及监控利器 Pandora FMS使用体验
2019-05-01
解决Esxi5下安装Windows 8的问题
2019-05-01
如何搭建Eclipse +Apache Tomcat配置Java开发环境
2019-05-01
开源计算机集群监控Ganglia应用视频
2019-05-01
Linux软件万花筒
2019-05-01
vSphere5安装配置视频教程
2019-05-01
《Linux企业应用案例精解》一书已由清华大学出版社出版
2019-05-01
安装配置FreeBSD9全过程体验
2019-05-01
全球开源软件发展趋势分析
2019-05-01