一、组合
表示的一种什么有什么的关系
先来说一下,__init__的作用
1
2
3
4
5
6
7
8
9
10
|
class Dog: def __init__( self , name, kind, hp, ad): self .name = name # 对象属性 属性 self .kind = kind self .hp = hp self .ad = ad def bite( self , p): p.hp - = self .ad # 人掉血 print ( \'%s咬了%s一口,%s掉了%s点血\' % ( self .name, p.name, p.name, self .ad)) |
实例化A和B
1
2
|
A = Dog( \'笨笨\' , \'teddy\' , 50 , 10 ) B = Dog( \'花花\' ) |
A职员是老员工,他知道这个游戏,狗有什么属性。
B是新来的,假如没有__init__方法,B就随便传参数了,但是类方法执行时,会报错。
为了避免这个问题,在__init__方法里面,约束某些属性,必须要传,否则方法执行出错。
人狗大战游戏,现在需要增加武器
武器是人的一个属性,比如攻击力,磨损度,价格,名字,品级,技能
增加一个类
1
2
3
4
5
6
7
8
9
10
11
|
class Weapon: def __init__( self , name, price, level, ad): self .name = name self .price = price self .level = level self .ad = ad * self .level # 升级之后,攻击就翻倍了 self .wear = 20 # 默认的耐久度,实例化时,可以不用传 def skill( self , dog): # 技能 dog.hp - = self .ad print ( \'%s受到了%s点的伤害,%s掉了%s点血\' % (dog.name, self .name, dog.name, self .ad)) |
实例化一个武器
1
|
axe = Weapon( \'斧头\' , 1000 , 100 , 1 ) # 斧头 |
二、组合实例
1.人狗大战
武器给谁装备呢?武器需要花钱买吧,那么就需要玩家充钱,现在加一个充钱功能
完整代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
class Person: def __init__( self , name, sex, hp, ad): self .name = name # 对象属性 属性 self .sex = sex self .hp = hp # 血量 self .ad = ad # 攻击力 self .money = 0 # 金额 self .arms = None # 默认武器为None<br> def attack( self , d): d.hp - = self .ad print ( \'%s攻击了%s,%s掉了%s点血\' % ( self .name, d.name, d.name, self .ad)) def pay( self ): # 充值 money = int ( input ( \'请输入您要充值的金额:\' )) self .money + = money print ( \'您的余额是:%s\' % self .money) def wear( self , weapon): # 装备武器 if self .money > = weapon.price: self .arms = weapon # 组合 给人装备了武器 self .money - = weapon.price print ( \'购买成功,您已经顺利装备了%s\' % weapon.name) else : print ( \'余额不足,请充值!\' ) def attack_with_weapon( self , dog): # 拿武器攻击狗 if \'arms\' in self .__dict__: # 如果武器属性在实例属性字典里 self .arms.skill(dog) # 使用武器攻击狗 else : print ( \'请先装备武器\' ) class Dog: def __init__( self , name, kind, hp, ad): self .name = name # 对象属性 属性 self .kind = kind self .hp = hp self .ad = ad def bite( self , p): p.hp - = self .ad # 人掉血 print ( \'%s咬了%s一口,%s掉了%s点血\' % ( self .name, p.name, p.name, self .ad)) class Weapon: # 武器 def __init__( self , name, price, level, ad): self .name = name # 武器名 self .price = price # 价格 self .level = level # 等级 self .ad = ad * self .level # 升级之后,攻击就翻倍了 self .wear = 20 # 默认的耐久度,实例化时,可以不用传 def skill( self , dog): # 技能,攻击狗 dog.hp - = self .ad # 狗掉血 print ( \'%s受到了%s点的伤害,%s掉了%s点血\' % (dog.name, self .name, dog.name, self .ad)) |
实例化武器,玩家购买武器,攻击狗
1
2
3
4
5
6
7
8
|
alex = Person( \'a_sb\' , \'不详\' , 1 , 5 ) boss_jin = Person( \'金老板\' , \'女\' , 20 , 50 ) teddy = Dog( \'笨笨\' , \'teddy\' , 50 , 10 ) axe = Weapon( \'斧头\' , 1000 , 100 , 1 ) # 斧头 alex.pay() # 充值 alex.wear(axe) # 装备武器斧头 alex.arms.skill(teddy) # 使用斧头攻击狗 |
执行输出: