组合
组合:给一个类的对象的属性 封装 另一个类的对象
第一种版本:
1 class Game_char: 2 def __init__(self, name, sex, ph, ad): # 2、开辟对象内存空间,把对象的属性都加载进去 3 self.name = name 4 self.sex = sex 5 self.ph = ph 6 self.ad = ad 7 8 def attack(self, par): # 4、par = jack这个对象名 9 par.ph -= self.ad # jack的ph量 = jack的ph量 - tyson的攻击力 10 print('%s攻击了%s,%s还剩%s血量' % (self.name, par.name, par.name, par.ph)) # self.name相当于tyson.name,par.name就是jack.name 11 12 tyson = Game_char('泰森', '男', 2000, 570) # 1、实例化对象出两个人物 13 jack = Game_char('杰克', '男', 1790, 456) 14 tyson.attack(jack) # 3、执行对象下面的方法,将jack传给attack方法里面的形参par
第二种版本:
1 class Game_char: 2 def __init__(self, name, sex, ph, ad): # 开辟对象内存空间,把对象的属性都加载进去 3 self.name = name 4 self.sex = sex 5 self.ph = ph 6 self.ad = ad 7 8 def attack(self, par): # par = jack这个对象名 9 par.ph -= self.ad # jack的ph量 = jack的ph量 - tyson的攻击力 10 print('%s攻击了%s,%s还剩%s血量' % (self.name, par.name, par.name, par.ph)) # self.name相当于tyson.name,par.name就是jack.name 11 12 class Arms: # 定义一个武器类 13 def __init__(self, name, ad): # 武器类的属性 14 self.name = name 15 self.ad = ad 16 17 def strike(self, par1, par2): 18 par2.ph -= (self.ad + par1.ad) # 武器本身攻击力加上攻击者攻击力 19 print('%s使用%s打了%s%s滴血,%s还剩%s滴血' % (par1.name, self.name, par2.name, (self.ad + par1.ad), par2.name, par2.ph)) 20 21 tyson = Game_char('泰森', '男', 2000, 570) # 实例化对象出两个人物 22 jack = Game_char('杰克', '男', 1790, 456) 23 aex = Arms('斧子', 70) # 实例化斧子这个对象 24 aex.strike(tyson,jack) # 斧子对象调用自己的方法,由于斧子不能直接进行攻击,得有人用手去操作,所以这么调用不是很好
第三种版本:
1 class Game_char: 2 def __init__(self, name, sex, ph, ad): # 开辟对象内存空间,把对象的属性都加载进去 3 self.name = name 4 self.sex = sex 5 self.ph = ph 6 self.ad = ad 7 8 def attack(self, par): # par = jack这个对象名 9 par.ph -= self.ad # jack的ph量 = jack的ph量 - tyson的攻击力 10 print('%s攻击了%s,%s还剩%s血量' % (self.name, par.name, par.name, par.ph)) # self.name相当于tyson.name,par.name就是jack.name 11 12 def aex_attack(self, arms): # 调用的是aex这个对象 13 self.arms = arms # arms 相当于 aex = Arms('斧子', 70) 14 15 class Arms: # 定义一个武器类 16 def __init__(self, name, ad): # 武器类的属性 17 self.name = name 18 self.ad = ad 19 20 def strike(self, par1, par2): 21 par2.ph -= (self.ad + par1.ad) # 武器本身攻击力加上攻击者攻击力 22 print('%s使用%s打了%s%s滴血,%s还剩%s滴血'% (par1.name, self.name, par2.name, (self.ad + par1.ad), par2.name, par2.ph)) 23 24 tyson = Game_char('泰森', '男', 2000, 570) # 实例化对象出两个人物 25 jack = Game_char('杰克', '男', 1790, 456) 26 aex = Arms('斧子', 70) # 实例化斧子这个对象
27 28 jack.aex_attack(aex) # jack这个对象调用自己的方法aex_attack,把aex这个对象传给这个方法。 29 jack.arms.strike(jack,tyson) # jack.arms就等于aex