通过实例分析组合
模拟英雄联盟写一个游戏人物的类
要求:
(1)创建一个 Game_role的类.
(2) 构造方法中给对象封装name,ad(攻击力),hp(血量).三个属性.
(3) 创建一个attack方法,此方法是实例化两个对象,互相攻击的功能:
例: 实例化一个对象 盖伦,ad为60, hp为600
实例化另个一个对象 剑豪 ad为70, hp为500
盖伦通过attack方法攻击剑豪,此方法要完成 '谁攻击谁,谁掉了多少血, 还剩多少血'的提示功能.
class Gamerole:
def __init__(self,name,ad,hp):
self.name=name
self.ad=ad
self.hp=hp
def attack(self,role):
role.hp=role.hp-self.ad
print('{}攻击了{},{}掉了{}血,还剩{}血'.format(self.name,role.name,role.name,self.ad,role.hp))
g1=Gamerole('盖伦',60,600)
g2=Gamerole('亚索',70,500)
g1.attack(g2) #盖伦攻击了亚索,亚索掉了60血,还剩440血
g2.attack(g1) #亚索攻击了盖伦,盖伦掉了70血,还剩530血
在原来的基础上给他们买了装备,然后用装备进行攻击,不含基础攻击,只计算装备的攻击力
class Gamerole:
def __init__(self,name,ad,hp):
self.name=name
self.ad=ad
self.hp=hp
def attack(self,role):
role.hp=role.hp-self.ad
print('{}攻击了{},{}掉了{}血,还剩{}血'.format\
(self.name,role.name,role.name,self.ad,role.hp))
def role_weapon(self,w): #给人物封装了一个武器属性,这个属性值是Weapon类的一个对象
self.weapon=w #组合
g1=Gamerole('盖伦',60,600)
g2=Gamerole('亚索',70,500)
class Weapon:
def __init__(self,name,ad):
self.name=name
self.ad=ad
def fight(self,role1,role2):
role2.hp=role2.hp-self.ad
print('{}使用{}攻击了{},{}掉了{}血,还剩{}血'.format\
(role1.name,self.name,role2.name,role2.name,self.ad,role2.hp))
w1=Weapon('黑切',80)
w2=Weapon('无尽',100)
g1.role_weapon(w1)
g1.weapon.fight(g1,g2) #盖伦使用黑切攻击了亚索,亚索掉了80血,还剩420血
g2.role_weapon(w2)
g2.weapon.fight(g2,g1) #亚索使用无尽攻击了盖伦,盖伦掉了100血,还剩500血
运用的就是将第二个类的对象作为参数添加到第一个类中的方法里去,给第一个类中的对象添加一个属性,
然后通过第一类中的对象和他的属性,去运行第二个类的方法
组合:给一个类的对象封装一个属性,这个属性是另一个类的对象
组合的意义:让类的对象与另一个类的对象产生关系,类与类之间产生关系
清风深知杨柳意,啤酒龙虾难相聚。


浙公网安备 33010602011771号