面向对象:继承抛砖引玉出来的开闭、多态代码样例

# -*- coding:utf-8 -*-
"""
客户端代码调用父类,子类方法真正执行动作。---->多态
新增子类方法,并不影响客户端代码和父类代码。--->开闭
"""


class Grenade:
    def __init__(self):
        """
            手榴弹类,作为客户端代码,调用伤害对象父类。
        """
        self.atk = 500  # 攻击

    def explosion_effects(self, target):
        """
            调用伤害对象父类,传入攻击作为参数
        """
        print('手榴弹爆炸!!!!')
        target.get_hurt(self.atk)


class Injured_object:
    """
        伤害对象父类,仅做简单的逻辑或者直接pass
    """

    def get_hurt(self, atk):
        pass


class Buildings(Injured_object):
    def __init__(self):
        self.hp = 10000

    def get_hurt(self, atk):
        self.hp -= atk
        print('建筑物受到%s伤害,剩余%s生命值' % (atk, self.hp))


class Players(Injured_object):
    def __init__(self):
        self.hp = 1200

    def get_hurt(self, atk):
        self.hp -= atk
        print('玩家受到%s伤害,剩余%s生命值' % (atk, self.hp))


if __name__ == '__main__':
    i = Injured_object()
    b = Buildings()
    p = Players()
    g = Grenade()
    g.explosion_effects(b)  # 建筑物对象传入给手榴弹的某方法中
    g.explosion_effects(p)  # 玩家对象传入给手榴弹的某方法中

由脚本执行结果印证了。客户端代码调用父类方法,但实际中执行的事子类的方法。当子类方法需要新增,修改,删除等,均不影响客户端代码和父类。符合开闭原则。而调用一个父类,却可以呈现不同子类的效果,是为多态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值