python_面向对象——对象间的组合关系

# 由一堆组件构成一个完整的实体,组建本身独立,但又不能自己运行,必须跟宿主组合在一起,运行。
class Dog:  #
    def __init__(self,name,dog_type,attack_val):
        self.name = name    #姓名
        self.dog_type = dog_type    #种类
        self.attack_val = attack_val  #攻击力
        self.life_val = 100 #生命值

class Person:   #
    def __init__(self,name,sex,attack_val):
        self.name = name    #姓名
        self.sex = sex    #种类
        self.attack_val = attack_val  #攻击力
        self.life_val = 100 #生命值
        self.weapon = Weapon()  #直接实例化武器类

    def attack(self,obj,weapon_name,weapon_val):
        agg = weapon_val + self.attack_val  #人的攻击力等于自身攻击力加上武器的攻击之和
        life_val = obj.life_val - agg   #狗的生命值减去人的攻击力,得到狗的剩余生命
        print('{}使用{}攻击了{},{}损失{}点生命值,剩余生命值{}'.format(self.name,weapon_name,obj.name,obj.name,weapon_val,life_val))


class Weapon:   #武器

    def stick(self):    #打狗棒
        self.name = '打狗棒'
        self.attack_val = 25
        return self.name,self.attack_val

    def knife(self):    #屠龙刀
        self.name = '屠龙刀'
        self.attack_val = 40
        return self.name, self.attack_val

    def gun(self):    #AK47
        self.name = 'AK47'
        self.attack_val = 40
        return self.name, self.attack_val

d = Dog('小黑','哈士奇',20)  #小黑
p = Person('wdc','',30)    #wdc

weapon_name,weapon_val = p.weapon.stick()   #使用对象p执行武器类中的方法:这里选择的武器是stick()方法下的"打狗棍"
p.attack(d,weapon_name,weapon_val)  #执行p对象下的attack(攻击)方法,人攻击狗(狗的对象,武器名称,武器攻击力)
#切换武器
# weapon_name,weapon_val = p.weapon.knife()   #使用对象p执行武器类中的方法:这里选择的武器是stick()方法下的"打狗棍"
# p.attack(d,weapon_name,weapon_val)  #执行p对象下的attack(攻击)方法,人攻击狗(狗的对象,武器名称,武器攻击力)

原文地址:https://www.cnblogs.com/wangdianchao/p/11843204.html