简略代码
class Hero:
def __init__(self,name,lev,init_self,attack_num):
self.name = name
self.lev = lev
self.init_self = init_self
self.attack_num = attack_num
def attack(self,obj):
# obj.init_self = obj.init_self - self.attack_num 和下面一行作用一样
obj.init_self -=self.attack_num
if hasattr(self,'mana'):
self.init_mana -= self.mana
class Master(Hero):
def __init__(self,name,lev,init_self,attack_num,init_mana,mana):
super().__init__(name,lev,init_self,attack_num)
self.init_mana = init_mana
self.mana = mana
class Soldier(Hero):
pass
rz = Master('瑞兹',1,800,70,100,12)
gl = Soldier('盖伦',1,950,80)
print(rz.init_mana)
print(gl.init_self)
rz.attack(gl)
print('*' * 20)
print(rz.init_mana)
print(gl.init_self)
详细解释
#hasattr(self,'mana'):作用是判断是否存在mana蓝值,用mana就是法师,
# 然后self.init_mana -= self.mana的作用就是总蓝量—耗蓝量,
# Master控制,这里是法师,class Master(Hero):是子类,继承hero的所有方法属性
# 在def __init__中我们又加了总蓝量和耗蓝量,又用supper().__init__
# 接受父类的所有方法,然后又添加实例对象属性(总蓝量和耗蓝量)
# Soldier是战士,同法师一样,没有添加内容,默认继承hero父类所有方法属性
# rz = Master('瑞兹', 1, 790, 69, 90, 10)传参
# gl = Soldier('盖伦', 1, 950, 80)传参,格式按照hero父类,
# print(rz.init_mana) 打印rz攻击前蓝量,print(gl.init_self)打印gl攻击前血量
# rz.attack(gl)开始攻击,执行attack(),并传参gl,给obj。obj血量为其
# obj总血量-法师攻击力(self.attack_num),判断为法师后,法师总蓝量为
# 法师原始蓝量-耗蓝量,到这就执行完攻击了,然后打印输出攻击结果
# print(rz.init_mana)
# print(gl.init_self)结果如下
# 100
# 950
# ********************
# 88
# 880
=====================升级版======================
class Hero:
def __init__(self,name,lev,init_self,attack_num):
self.name = name
self.lev = lev
self.init_self = init_self
self.attack_num = attack_num
def attack(self,obj):
# obj.init_self = obj.init_self - self.attack_num 和下面一行作用一样
obj.init_self -=self.attack_num
if hasattr(self,'mana'):
self.init_mana -= self.mana
def equip(self):
# random
self.init_self += 1000
self.attack_num += 400
class Master(Hero):
def __init__(self,name,lev,init_self,attack_num,init_mana,mana):
super().__init__(name,lev,init_self,attack_num)
self.init_mana = init_mana
self.mana = mana
class Soldier(Hero):
pass
rz = Master('瑞兹',1,800,70,100,12)
gl = Soldier('盖伦',1,950,80)
# print(rz.init_mana)
# print(gl.init_self)
# rz.attack(gl)
# print('*' * 20)
# print(rz.init_mana)
# print(gl.init_self)
print('瑞兹初始蓝量-->',rz.init_mana)
print('盖伦初始血量-->',gl.init_self)
gl.equip()
print('盖伦装备加血-->',gl.init_self)
print('盖伦装备加攻击-->',gl.attack_num)
rz.attack(gl)
print('战斗后瑞兹剩余蓝量-->',rz.init_mana)
print('战斗后盖伦剩余血量-->',gl.init_self)
#瑞兹初始蓝量--> 100
#盖伦初始血量--> 950
#盖伦装备加血--> 1950
#盖伦装备加攻击--> 480
#战斗后瑞兹剩余蓝量--> 88
#战斗后盖伦剩余血量--> 1880
=========================================