通过Variab访问类

2024-06-01 00:41:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个小游戏,我将要做的是使用类来指定用户首选类的统计信息。我需要让这些职业在与怪物战斗时(怪物也在自己的职业中),我可以调用他们的统计数据

这可能是一个“大问题”,但为了避免编写三次代码(针对每个类),我只想调用变量“chosenClass.HP”而不是“Mage.HP”,因为如果这样做,我需要为故事中的每个类都使用一组if语句。一定有更好的办法

我在这两方面都做过,我讨厌写作

if userChoice is 'Mage':
   HP = 150

我环顾了一下自己,但我不完全明白这是怎么回事。如果这是必需的或推荐的解决方案,那么什么是最好的学习资源

print("Welcome to the game")

name = input("Choose your name\n")
print(name)

class Warrior:
    HP = 100
    ATK = 200
    DEF = 0

class Mage:
    HP = 100
    ATK = 200
    DEF = 0

class Rouge:
    HP = 150
    ATK = 250
    DEF = 100

user_class = input("Choose a class between Warrior, Mage, or Rouge\n")
print(user_class)

while(user_class != 'Warrior' and user_class != 'Mage' and user_class != 'Rouge'):
    print("You did not choose from the required classes, try again")
    user_class = input()

theClass = user_class()
theClass.HP = 1000

我从这段代码中得到的错误是: TypeError:“str”对象不可调用 我知道它被赋予了一个字符串,但它是一个变量。为什么会产生问题

有什么建议可以让这个计划更好


Tags: 代码nameinputifdefclasshpprint
2条回答

如果要创建这样的实例,需要将字符串映射到类

pc_classes = {'Mage': Mage, 'Warrior': Warrior, 'Rogue': Rogue}
while True:
    try:
        user_class = input("Enter Mage, Warrior, or Rogue)
    if user_class in pc_classes:
        break

pc = pc_classes[user_class]()

user_class返回一个字符串,而不是您上面定义的实际Class。这是因为input()返回一个字符串,并将其存储在user_class中。为了创建在代码中创建的类的新实例,需要使用基于播放器输入的某种逻辑来实例化该类,例如:

if user_class.lower() == 'warrior':
    theClass = Warrior()

theClass.HP = 1000

显然,这不是最好的方法,但只是一个演示如何实例化类的示例

相关问题 更多 >