通过变量访问类

时间:2019-04-11 19:12:12

标签: python scripting

我正在尝试制作一个小型游戏,而我要做的是使用类来指示用户首选类的统计信息。我需要进行上课,以便与怪物战斗(这也将在其自己的职业中)时,我将可以使他们的属性生效。

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

我在这两种方法上都做过,而且我讨厌写

if userChoice is 'Mage':
   HP = 150

我已经看过self.something,但是我不完全了解它是如何工作的。如果这是必需的或推荐的解决方案,那么最佳的学习资源是什么?

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”对象不可调用 我知道给它一个字符串,但这是一个变量。为什么会引起问题?

有什么建议可以使这个程序更好?

2 个答案:

答案 0 :(得分:1)

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

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]()

答案 1 :(得分:1)

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

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

theClass.HP = 1000

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