python面向对象,类与类之间的关系

# 咱们设计一个游戏人物类,让实例化几个对象让这几个游戏人物实现互殴的效果
#
# class Gamerole:
#
# def __init__(self,name,ad,hp):
# self.name = name
# self.ad = ad
# self.hp = hp
#
# def attack(self,p1):
# p1.hp = p1.hp - self.ad
# print(f'{self.name}攻击{p1.name}{p1.name}掉了{self.ad}血,还剩{p1.hp}')
#
# gailun = Gamerole('盖伦',10,100)
# yasuo = Gamerole('亚索',20,80)

# 盖伦攻击亚索
# gailun.attack(yasuo)

# 亚索攻击盖伦
# yasuo.attack(gailun)

# 但是这样互相攻击没有意思,一般游戏类的的对战方式要借助武器,武器是一个类,
# 武器类包含的对象很多:刀枪棍剑斧钺钩叉等等,所以咱们要写一个武器类。
#
# class Gamerole:
#
# def __init__(self,name,ad,hp):
# self.name = name
# self.ad = ad
# self.hp = hp
#
# def attack(self,p1):
# p1.hp = p1.hp - self.ad
# print(f'{self.name}攻击{p1.name}{p1.name}掉了{self.ad}血,还剩{p1.hp}')
#
# class Weapon:
# def __init__(self,name,ad):
# self.name = name
# self.ad = ad
#
# def weapon_attack(self,p1,p2):
# p2.hp = p2.hp - self.ad - p1.ad
# print(f'{p1.name}利用{self.name}攻击了{p2.name}{p2.name}还剩{p2.hp}')
#
#
# gailun = Gamerole('盖伦',10,100)
# yasuo = Gamerole('亚索',20,80)
# pillow = Weapon('绣花枕头',2)
# pillow.weapon_attack(gailun,yasuo)

# 但是上面这么做不好,利用武器攻击是人类,人类是动作的发起者,所以不能是pillow武器对象,而是人类利用武器攻击对方

class Gamerole:  # 定义一个游戏人物类

    def __init__(self,name,ad,hp):
        self.name = name
        self.ad = ad
        self.hp = hp

    def attack(self,p1):  # 人类基础伤害
        p1.hp = p1.hp - self.ad
        print(f'{self.name}攻击{p1.name},{p1.name}掉了{self.ad}血,还剩{p1.hp}血')

    def equip_weapon(self,wea):
       # print(self)   谁调用equip_weapon,即self=调用者
       # print(wea)   wea等于调用者传的值
        self.wea = wea # 组合,给一个对象封装一个属性,该属性是另一个类的对象


class Weapon:  # 定义一个武器类
    def __init__(self,name,ad):
        self.name = name
        self.ad = ad

    def weapon_attack(self,p1,p2):   # 武器攻击伤害
        p2.hp = p2.hp - self.ad - p1.ad
        print(f'{p1.name}利用{self.name}攻击了{p2.name},{p2.name}还剩{p2.hp}血')

# 实例化三个人物对象:
xiaoyang = Gamerole('小阳',10,100)
xiaoming = Gamerole('小明',30,90)
pillow = Weapon('绣花枕头',50)

# 给人物装备武器对象
# print(xiaoyang)
xiaoyang.equip_weapon(pillow)  # 这步相当于 调用def equip_weapon方法,即self=xiaoyang=Gamerole   ,wea=pillow=Weapon
xiaoming.equip_weapon(pillow)

# 开始攻击
# xiaoyang 攻击
xiaoyang.wea.weapon_attack(xiaoyang,xiaoming)

# xiaoming 攻击
xiaoming.wea.weapon_attack(xiaoming,xiaoyang)

 

 
posted @ 2020-10-18 14:46  lioyang  阅读(102)  评论(0)    收藏  举报