47 python - 面向对象(老王开枪案例)
2023-09-11 14:15:43 时间
1. 人类
属性
- 姓名
- 血量
- 持有的枪
方法
- 安子弹
- 安弹夹
- 拿枪(持有抢)
- 开枪
2. 子弹类
属性
- 杀伤力
方法
- 伤害敌人(让敌人掉血)
3. 弹夹类
属性
- 容量(子弹存储的最大值)
- 当前保存的子弹
方法
- 保存子弹(安装子弹的时候)
- 弹出子弹(开枪的时候)
4. 枪类
属性
- 弹夹(默认没有弹夹,需要安装)
方法
- 连接弹夹(保存弹夹)
- 射子弹
参考代码:
#人类
class Ren:
def __init__(self,name):
self.name = name
self.xue = 100
self.qiang = None
def __str__(self):
return self.name + "剩余血量为:" + str(self.xue)
def anzidan(self,danjia,zidan):
danjia.baocunzidan(zidan)
def andanjia(self,qiang,danjia):
qiang.lianjiedanjia(danjia)
def naqiang(self,qiang):
self.qiang = qiang
def kaiqiang(self,diren):
self.qiang.she(diren)
def diaoxue(self,shashangli):
self.xue -= shashangli
#弹夹类
class Danjia:
def __init__(self, rongliang):
self.rongliang = rongliang
self.rongnaList = []
def __str__(self):
return "弹夹当前的子弹数量为:" + str(len(self.rongnaList)) + "/" + str(self.rongliang)
def baocunzidan(self,zidan):
if len(self.rongnaList) < self.rongliang:
self.rongnaList.append(zidan)
def chuzidan(self):
#判断当前弹夹中是否还有子弹
if len(self.rongnaList) > 0:
#获取最后压入到单间中的子弹
zidan = self.rongnaList[-1]
self.rongnaList.pop()
return zidan
else:
return None
#子弹类
class Zidan:
def __init__(self,shashangli):
self.shashangli = shashangli
def shanghai(self,diren):
diren.diaoxue(self.shashangli)
#枪类
class Qiang:
def __init__(self):
self.danjia = None
def __str__(self):
if self.danjia:
return "枪当前有弹夹"
else:
return "枪没有弹夹"
def lianjiedanjia(self,danjia):
if not self.danjia:
self.danjia = danjia
def she(self,diren):
zidan = self.danjia.chuzidan()
if zidan:
zidan.shanghai(diren)
else:
print("没有子弹了,放了空枪....")
#创建一个人对象
laowang = Ren("老王")
#创建一个弹夹
danjia = Danjia(20)
print(danjia)
#循环的方式创建一颗子弹,然后让老王把这颗子弹压入到弹夹中
i=0
while i<5:
zidan = Zidan(5)
laowang.anzidan(danjia,zidan)
i+=1
#测试一下,安装完子弹后,弹夹中的信息
print(danjia)
#创建一个枪对象
qiang = Qiang()
print(qiang)
#让老王,把弹夹连接到枪中
laowang.andanjia(qiang,danjia)
print(qiang)
#创建一个敌人
diren = Ren("敌人")
print(diren)
#让老王拿起枪
laowang.naqiang(qiang)
#老王开枪射敌人
laowang.kaiqiang(diren)
print(diren)
print(danjia)
laowang.kaiqiang(diren)
print(diren)
print(danjia)
相关文章
- python -- numpy 基本数据类型,算术运算,组合,分割 函数
- Python异步非阻塞IO多路复用Select/Poll/Epoll使用
- Python中python-nmap模块的使用
- Python+NumPy绘制常见曲线的方法详解_python
- python-nmap使用及案例
- 地球引擎初级教程——Python API 语法(内涵JavaScript转python工具包介绍)
- python中的互斥锁Lock
- 35岁了转行python可以吗?什么样的人合适学习Python?
- 【python实战】拒绝黄牛!我要用python原价冲周董演唱会~Python自动秒杀抢票脚本
- python基础——使用@property
- 77 python - 打飞机案例(优化代码)
- 使用 Python 和 Asyncio 编写在线多人游戏(一)
- python学习之基于Python的人脸识别技术学习
- Python零基础好学吗?零基础如何学习Python?
- python字符串str和字节数组bytes相互转化
- python 数据组合
- Python 3.x版本中的字符串
- Python教程之Python 中有效地存储 Pandas 数据帧
- (数据科学学习手札32)Python中re模块的详细介绍
- Python爬虫之Scrapy框架(案例练习)
- 【Python基础】我的第一个 python 程序
- 机器学习完整过程案例分布解析,python代码解析
- Python 基础 之 多任务 gevent 协程应用的简单案例,简单实现下载网上文件的功能(urllib,gevent 等)
- Python 基础 之 python 进程知识点整理,实现一个简单使用进程池的多进程文件夹文件copy器
- python第十四课--排序及自定义函数之自定义函数(案例二)
- python第一课——关于python的一些概念
- Python opencv-python 简单测试