MST

星途 面试题库

面试题:Python类模拟实物:基于继承与多态的游戏角色系统

在一个角色扮演游戏中,有战士、法师、盗贼三种角色类型。所有角色都有生命值、攻击力等基本属性,以及攻击、防御等基本行为。战士可以使用近战武器进行强力攻击,法师能释放各种魔法技能,盗贼擅长潜行和偷袭。请使用Python的类继承和多态特性来设计这个游戏角色系统。要求代码结构清晰,包含角色基类及各具体角色子类的定义,详细解释如何通过继承和多态实现不同角色的特性,并且考虑如何处理角色升级、技能学习等扩展功能。
43.1万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
class Character:
    def __init__(self, health, attack_power):
        self.health = health
        self.attack_power = attack_power

    def attack(self):
        print("角色进行攻击,造成 {} 点伤害".format(self.attack_power))

    def defend(self):
        print("角色进行防御")

    def level_up(self):
        self.health += 10
        self.attack_power += 5
        print("角色升级,生命值增加10,攻击力增加5")

    def learn_skill(self, skill_name):
        print("角色学习了新技能: {}".format(skill_name))


class Warrior(Character):
    def __init__(self, health, attack_power, weapon):
        super().__init__(health, attack_power)
        self.weapon = weapon

    def attack(self):
        print("战士使用 {} 进行近战攻击,造成 {} 点伤害".format(self.weapon, self.attack_power))


class Mage(Character):
    def __init__(self, health, attack_power, magic_type):
        super().__init__(health, attack_power)
        self.magic_type = magic_type

    def attack(self):
        print("法师释放 {} 魔法,造成 {} 点伤害".format(self.magic_type, self.attack_power))


class Thief(Character):
    def __init__(self, health, attack_power):
        super().__init__(health, attack_power)

    def sneak(self):
        print("盗贼进入潜行状态")

    def attack(self):
        print("盗贼进行偷袭,造成 {} 点伤害".format(self.attack_power))


# 继承实现
# 战士、法师、盗贼类都继承自Character基类,这样它们自动拥有了基类的属性(生命值、攻击力)和行为(攻击、防御、升级、学习技能),
# 减少了代码重复,体现了继承的特性。

# 多态实现
# 每个子类都重写了基类的attack方法,当调用不同子类实例的attack方法时,会表现出不同的行为,这就是多态。
# 比如战士使用武器近战攻击,法师释放魔法攻击,盗贼偷袭。

# 角色升级和技能学习扩展功能
# 在基类中定义了level_up和learn_skill方法,子类继承后可以直接使用,也可以根据需要重写。
# 例如当调用角色实例的level_up方法时,会按照基类定义的逻辑增加生命值和攻击力。
# 调用learn_skill方法时,会打印学习新技能的信息。

# 示例使用
warrior = Warrior(100, 20, "剑")
warrior.attack()
warrior.level_up()

mage = Mage(80, 30, "火焰魔法")
mage.attack()
mage.learn_skill("治疗术")

thief = Thief(90, 25)
thief.sneak()
thief.attack()