需求:士兵突进

  • 士兵许三多有一把 AK47
  • 士兵可以开火
  • 枪能够发射子弹
  • 枪装填子弹,可以增加子弹数量

需求分析

  • 很明显有两个类:士兵类,枪类
  • AK47 是枪名,是枪类的属性,每把枪都有子弹数,所以子弹数也是一个属性
  • 发生子弹是一个行为,所以是一个方法
  • 装填子弹也是一个行为,也是一个方法
  • 许三多是姓名,是士兵类的属性;士兵拥有枪,所以枪也是一个属性,对应的是枪类【一个对象的属性可以是另外一个类创建的对象】
  • 开火是士兵类的一个行为,所以是一个方法,开火会发射子弹,所以应该调用枪的发射方法

类图

本次实战采用封装思想,将所有属性私有化,并且每个属性都有 setter、getter 方法

代码实现

  • 面向对象编程的第一步:将属性和方法封装到一个抽象的类中
  • 外接使用类创建对象,然后让对象调用方法
  • 对象方法的细节都被封装在类的内部

先开发枪类还是士兵类?

枪类,因为士兵类依赖枪类,被依赖的类应该优先开发

枪类

假设每把枪一开始都没子弹,需要先手动装弹

class Gun:# 构造方法def __init__(self, name):# 封装 - 将实例属性私有化self.__name = nameself.__bullet_count = 0# 自定义打印对象方法def __str__(self):return f"枪名:{self.__name} 子弹数:{self.__bullet_count}"# name - getter@propertydef name(self):return self.__name# name - setter@name.setterdef name(self, name):self.__name = name# count - getter@propertydef bulletCount(self):return self.__bullet_count# count - setter 相当于装子弹@bulletCount.setterdef bulletCount(self, count):self.__bullet_count += count# shot 发射def shoot(self):# 1、判断是否能发射if self.__bullet_count <= 0:print(f"{self.__name} 没有子弹了,请先装弹")return# 2、发射print(f"枪名:{self.__name} 发射")# 3、减少子弹self.__bullet_count -= 1

士兵类

假设每一个新兵一开始都没有枪

class Solider:# 构造方法def __init__(self, name):self.__name = name# 默认没有枪self.__gun = None# 自定义打印对象方法def __str__(self):return f"士兵名字:{self.__name} 拿着一把:{self.__gun.name}"# name - getter@propertydef name(self):return self.__name# name - setter@name.setterdef name(self, name):self.__name = name# gun - getter@propertydef gun(self):return self.__gun@gun.setterdef gun(self, gun):self.__gun = gundef fire(self):# 1、先判断是有枪if self.__gun is None:print(f"{self.__name} 士兵没有枪,不能发射!!请先装备枪!!")return# 2、有枪也要有子弹呀!上膛!self.__gun.bulletCount += 10# 3、拿枪射击!self.__gun.shoot()

拿枪射击,其实是

执行代码块

# 声明一个枪
ak47 = Gun("ak47")
print(ak47)# 声明一个士兵
xusanduo = Solider("许三多")
# 给士兵带上 AK47!
xusanduo.gun = ak47
# 开火!
xusanduo.fire()print(xusanduo)# 输出结果
枪名:ak47 子弹数:0
枪名:ak47 发射
士兵名字:许三多 拿着一把:ak47

Python - 面向对象编程 - 实战(4)相关推荐

  1. Python - 面向对象编程 - 实战(5)

    前言 主要是针对静态方法.类方法.实例方法.类属性.实例属性的混合实战 需求 设计一个 Game 类 属性 定义一个类属性 top_score 记录游戏的历史最高分,这个属性很明显只跟游戏有关,跟实例 ...

  2. python硬件编程_Python学习日记_《Python硬件编程实战》笔记_Mr_Ouyang

    书名: Python硬件编程实战 作者: 李茂 出版社: 机械工业出版社 [此处需要插入图片 Python封面] 笔者简评:不太适宜购买,全书大篇幅在用图片来解释极简单的细节,对于那些需要作者去深挖. ...

  3. 视频教程-彻底掌握Python面向对象编程-Python

    彻底掌握Python面向对象编程 曾就职于猎豹移动,从业已有8年,资深技术专家,现致力于线上教育 陈政强 ¥39.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP ...

  4. python面向对象编程从零开始_Python面向对象编程从零开始(3)—— 小姐姐请客上篇

    前言 好了,接着昨天的故事继续. 上文说到我和小姐姐相互自我介绍了 今天我们继续讲我与小姐姐的故事: self的作用 class Car: def drive(self): print('我正在开车' ...

  5. 这可能是Python面向对象编程的最佳实践

    作者 | 崔庆才 来源 | 进击的Coder(ID:FightingCoder) Python 是支持面向对象的,很多情况下使用面向对象编程会使得代码更加容易扩展,并且可维护性更高,但是如果你写的多了 ...

  6. Python面向对象编程:类继承和其衍生术语

    Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...

  7. 《Python面向对象编程指南》——1.2 基类中的__init__()方法

    本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...

  8. 关于python面向对象编程中、下列说法中_关于Python面向对象编程的知识点总结

    前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们 ...

  9. 《Python硬件编程实战》——2.8 在Mac中安装Python

    本节书摘来自华章计算机<Python硬件编程实战>一书中的第2章,第2.8节,作者:李茂 著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.8 在Mac ...

最新文章

  1. OCP换考题了,052新考题及答案整理-第17题
  2. PyTorch 1.6正式发布!新增自动混合精度训练、Windows版开发维护权移交微软
  3. Android Interactive Animation
  4. Android之GSON解析JSON
  5. php获取特殊标签,thinkphp特殊标签使用
  6. 根据递归定义的数据表循环生成xml
  7. 判断点是否在一个矩形内
  8. 78 ----二次曲面方程的化简、移轴变换、转轴变换、伸缩变换
  9. oracle数据库第十一章答案,[转载]《互联网数据库》网上作业练习题10-11章答案...
  10. 冲压模板自动标注LISP_CAD AutoLisp实现自动标注序号
  11. windows 一键设置ip地址脚本
  12. Prometheus 结合cAdvisor、AlertManager、node-exporter 监控容器并实现邮箱告警
  13. goahead webserver源码分析
  14. 脑机接口:互联网遥远的疆界
  15. php 58房源采集,如何用火车采集器采集二手房数据
  16. 最新我爱防红网QQ防红跳转短网址生成源码
  17. You Can’t Future-Proof Solutions
  18. 在javascript中使用纯函数处理副作用
  19. AI 量化机器人,人工智能如何助你从股市发家?
  20. 利用java swing编写一个简易的计算器,实现了括号,优先级,三角函数,阶乘等功能

热门文章

  1. [翻译] 在 Overleaf 中使用参考文献
  2. 阿里云CentOS7.2清除wnTKYg木马
  3. 华为——IS-IS理论+实验,L1,L2,L1-2彼此之间的邻居关系建立
  4. ios查看苹果app的下载量,日活,销售情况等相关数据
  5. 2.2 华为-软件工程师-7.21笔试题
  6. shell脚本部署俄罗斯方块
  7. 深度学习/自动驾驶数据集大集合(目标检测/图像分割/语义分割/图像分类/)
  8. 如何迅速练好英语口语?
  9. 计算机重启后e盘没了,Win10电脑怎么隐藏磁盘分区?
  10. Latex中求和符号的使用