python 全栈开发,Day19(组合,组合实例,初识继承)
一、组合
表示的一种什么有什么的关系
先来说一下,__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) # 使用斧头攻击狗 |
执行输出:
