python - 我可以将变量分配给分配给 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)
解决方案
要将 tutoEnemy1 或 tutoEnemy2 的引用分配给“selectedEnemy”,您应该去掉括号,因为它们是调用函数的标准语法。由于 tutoEnemy1 和 tutoEnemy2 不可调用(=非函数),因此会引发此错误。
所以代码应该是这样的:
def damage():
option = input("> ")
if option == 1:
selectedEnemy = tutoEnemy1
elif option == 2:
selectedEnemy = tutoEnemy2
但是,当您尝试从 selectedEnemy 实例而不是从他们的 HP 中减去伤害时,您可能会遇到上一条语句的问题,因此您可能想要这样的东西:
selectedEnemy.hp -= finalDamage
推荐阅读
- react-native - React Switch withStyles disabled coloration
- php - Ajax response is not returning in sorted form laravel controller
- reactjs - Invariant Violation: `requireNativeComponent`
- php - 从 JSON 中获取值并在 PHP 中显示它(foreach 命令)
- python - 在自定义转换器中使用 .loc 会产生带有切片错误的副本
- reactjs - 确保在渲染时使用 React 组件进行入口 css 转换
- android - 如何对从 Paging 3 返回 PagingSource 的 Room Dao 查询进行单元测试
- android-emulator - andorid模拟器构建aosp后显示黑屏
- c# - 我有一个 C# 控制台项目,我正在使用 atter 而没有 setter
- c++ - 处理c ++时如何不黑屏