组合

组合:给一个类的对象的属性 封装 另一个类的对象

第一种版本:

 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
posted on 2018-06-20 14:56  花豆豆  阅读(277)  评论(0编辑  收藏  举报