对象中的组合方法

知识要点
对象中的组合:给一个类的对象封装一个属性,这个属性是另一个类的对象。
组合的意义:让类的对象与另一个类的对象产生关系,类与类之间产生关系。

例题:
要求:
(1)创建一个 Game_role的类.
(2) 构造方法中给对象封装name,ad(攻击力),hp(血量).三个属性.
(3) 创建一个attack方法,此方法是实例化两个对象,互相攻击的功能:
     例: 实例化一个对象 盖伦,ad为10, hp为100
     实例化另个一个对象 剑豪 ad为20, hp为80
     盖伦通过attack方法攻击剑豪,此方法要完成 '谁攻击谁,谁掉了多少血,  还剩多少血'的提示功能.
解题一:
class Game_role:
    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))
p1=Game_role('盖伦',10,100)
p2=Game_role('剑豪',20,80)
p1.attack(p2)   # p2 对应的是attack方法中的形参role

解题二:增加使用武器攻击
class Game_role:
    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 fengzwq(self,w): #这里的w是封装另一个类的对象,如p1.fengzwq(w2),那么self(调用者)就拥有了w2的属性,p1.wq就等于w2
        self.wq = w

p1=Game_role('盖伦',10,1000)
p2=Game_role('剑豪',20,800)
class Weapon:
    def __init__(self,name,ad):
        self.name=name
        self.ad=ad
    def gongji(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('大宝剑',200)
w2=Weapon('武士刀',500)
p1.fengzwq(w1)  # 这一步使p1拥有了W1武器的属性
p1.wq.gongji(p1,p2)  # p1.wq 等于武器 w1













原文地址:https://www.cnblogs.com/banjh/p/9531864.html