python全栈学习--Day19(面向对象组合,继承)

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
= Dog('笨笨''teddy'5010)
= 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('斧头'10001001)  # 斧头

二、组合实例

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''不详'15)
boss_jin = Person('金老板''女'2050)
teddy = Dog('笨笨''teddy'5010)
axe = Weapon('斧头'10001001)  # 斧头
 
alex.pay()  # 充值
alex.wear(axe)  # 装备武器斧头
alex.arms.skill(teddy)  # 使用斧头攻击狗

执行输出:

原文地址:https://www.cnblogs.com/haowen980/p/8810202.html