029. Python多态介绍

katyusha 2020-02-16

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

  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

相关推荐