首页 > 解决方案 > 我可以将变量分配给分配给 Class 实例的变量吗?- Python问题

问题描述

我正在创建一个基于文本的游戏,我一直有这个问题,我不知道如何解决......

class Enemy:
    def __init__(self, hp, maxHp, attack, defense):
        self.maxHp = 100
        self.hp = self.maxHp
        self.attack = 5
        self.defense = 1
# --- Now we just create the two different enemies from this class --- #
tutoEnemy1 = Enemy(100, 100, 5, 1)
tutoEnemy2 = Enemy(100, 100, 5, 1)

这是与问题有关的代码。我将两个变量分配给 Class 实例以获得两个单独的敌人。一个叫 tutoEnemy1,另一个叫 tutoEnemy2

在游戏的代码中,包含战斗功能的部分当然有一个涉及攻击敌人的部分。我原本以为通过创建两个单独的“if”语句,选择要攻击的敌人的那一刻一切都会好起来,但后来我意识到,在出现超过 2 个敌人的那一刻,我有很多垃圾,重复代码涉及计算损坏和所有这些东西的过程。

我提出了一个想法,即定义一个每次都实现伤害计算过程的函数,这样我就不必重复任何代码

def damage():
    option = input("> ")
    if option == 1:
        selectedEnemy = tutoEnemy1()
    elif option == 2:
        selectedEnemy = tutoEnemy2()
    else:
        input("Incorrect input, type a correct one.")
        damage()
    rawDamage = Player.attack * multiplierDamage
    finalDamage = rawDamage - selectedEnemy.defense
    selectedEnemy -= finalDamage

问题来了,最初我将 Enemy 类实例分配给“tutoEnemy1&2”变量,一切正常。但是现在,它给了我一个问题,“selectedEnemy”的变量似乎没有按照我的预期工作(获取一个敌人或另一个敌人的信息)。它只是给了我这个错误:

Traceback (most recent call last):
  File "c:\Users\acmem\Desktop\Text-Based Game\RPG.py", line 75, in <module>
    selectedEnemy = tutoEnemy1()
TypeError: 'Enemy' object is not callable

有没有办法这样做?如果是这样,正确的语法是什么?(我使用 Python 3.0)

标签: pythonpython-3.x

解决方案


要将 tutoEnemy1 或 tutoEnemy2 的引用分配给“selectedEnemy”,您应该去掉括号,因为它们是调用函数的标准语法。由于 tutoEnemy1 和 tutoEnemy2 不可调用(=非函数),因此会引发此错误。

所以代码应该是这样的:


def damage():
    option = input("> ")
    if option == 1:
        selectedEnemy = tutoEnemy1
    elif option == 2:
        selectedEnemy = tutoEnemy2

但是,当您尝试从 selectedEnemy 实例而不是从他们的 HP 中减去伤害时,您可能会遇到上一条语句的问题,因此您可能想要这样的东西:

    selectedEnemy.hp -= finalDamage

推荐阅读