• 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)  # 使用斧头攻击狗

    执行输出:

  • 相关阅读:
    Go语言趣学指南lesson3
    简单的>this
    多媒体查询
    解析对象原型链
    笑对人生,坐看云起云落
    HTML5
    javascript函数及作用域的小结
    不得不知call()和apply()
    浅谈弹性盒子布局
    编译原理实验(算符优先文法)
  • 原文地址:https://www.cnblogs.com/haowen980/p/8810202.html
Copyright © 2020-2023  润新知