katyusha 2020-02-16
多态:不同的子类对象,调用相同的父类方法,产生不同的结果
在不改变原有代码的前提下,实现了不同的效果
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