zoukankan      html  css  js  c++  java
  • 029. Python多态介绍

    多态:不同的子类对象,调用相同的父类方法,产生不同的结果

    1. 继承
    2. 重写

    在不改变原有代码的前提下,实现了不同的效果

    复制代码
    class Soldier():
            # 攻击
            def attack(self):
                    pass
            # 后退
            def back(self):
                    pass
    
    # 陆军
    class Army(Soldier):
            def attack(self):
                    print("[陆军]击鼓进攻")
    
            def back(self):
                    print("[陆军]鸣金撤退")
    
    # 海军
    class Navy(Soldier):
            def attack(self):
                    print("[海军]发射鱼雷")
    
            def back(self):
                    print("[海军]潜入海底")
    
    # 空军
    class AirForce(Soldier):
            def attack(self):
                    print("[空军]空中投弹")
            def back(self):
                    print("[空军]掉头撤退")
    
    # 类的实例化 返回陆军对象
    army_obj = Army()
    # 类的实例化 返回海军对象
    navy_obj = Navy()
    # 类的实例化 返回空军对象
    af_obj = AirForce()
    
    # 各就位准备
    listvar = [army_obj,navy_obj,af_obj]
    
    # 将军下达命令
    sign = True
    while sign:
            strvar = """
            1.全体攻击
            2.全体撤退
            3.空军上,其他人撤退
            """
            print(strvar)
            num = input("将军,请下达您的指令:")
    
    
            if num == "1":
                    for i in listvar:
                            i.attack()
    
            elif num == "2":
                    for i in listvar:
                            i.back()
    
            elif num == "3":
                    for i in listvar:
                            # 如果当前的对象是空军类型的,调用attack方法
                            if isinstance(i,AirForce):
                                    i.attack()
                            # 否则调用back方法
                            else:
                                    i.back()
    
            elif num.upper() == "Q":
                    # sign=False
                    break
    
            else:
                    print("报告长官,风太大,我听不到")
    复制代码

    执行

    复制代码
            1.全体攻击
            2.全体撤退
            3.空军上,其他人撤退
    
    将军,请下达您的指令:1
    [陆军]击鼓进攻
    [海军]发射鱼雷
    [空军]空中投弹
    
            1.全体攻击
            2.全体撤退
            3.空军上,其他人撤退
    
    将军,请下达您的指令:2
    [陆军]鸣金撤退
    [海军]潜入海底
    [空军]掉头撤退
    
            1.全体攻击
            2.全体撤退
            3.空军上,其他人撤退
    
    将军,请下达您的指令:3
    [陆军]鸣金撤退
    [海军]潜入海底
    [空军]空中投弹
    
            1.全体攻击
            2.全体撤退
            3.空军上,其他人撤退
    
    将军,请下达您的指令:4
    报告长官,风太大,我听不到
    
            1.全体攻击
            2.全体撤退
            3.空军上,其他人撤退
    
    将军,请下达您的指令:q
    复制代码
    学习记录,小白一枚
  • 相关阅读:
    C# 关键字 virtual、override和new的用法
    架构技术及架构要素总结【转】
    vue文件目录结构
    vue项目中,如何对static文件夹下的静态文件添加时间戳,以达到清除缓存
    webpack中关于require与import的区别
    vue 根据下拉框动态切换form的rule
    el-select 根据value查询其对应的label值
    web前端项目规范
    JavaScript 编码规范
    HTML 编码规范
  • 原文地址:https://www.cnblogs.com/wangsirde0428/p/14322576.html
Copyright © 2011-2022 走看看