Доступ к классам через переменную - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь сделать небольшую игру, и я буду использовать классы для определения характеристик предпочитаемого пользователем класса. Мне нужно сделать классы, чтобы, когда придет время сражаться с монстром (который также будет в своем классе), я смогу вызывать их характеристики.

Это может быть проблемой "большой картины", но чтобы избежать написания кода три раза (для каждого класса), я хочу вызвать только переменную "selectedClass.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

Моя ошибка, которую я получаю из этого кода: Ошибка типа: объект 'str' не вызывается Я понимаю, что ему дают строку, но это переменная. Почему это вызывает проблемы?

Какие-нибудь рекомендации, чтобы сделать эту программу лучше?

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

user_class возвращает строку, а не фактическую Class, которую вы определили выше.Это потому, что input() возвращает строку, а вы сохраняете ее в user_class.Чтобы создать новый экземпляр классов, которые вы создали в своем коде, необходимо создать экземпляр класса, используя некую логику, основанную на входных данных игрока, таких как:

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

theClass.HP = 1000

Очевидно, что это не будет лучшимспособ, но это просто пример, чтобы показать, как создать экземпляр класса.

1 голос
/ 11 апреля 2019

Вам нужно сопоставить строки с классами, если вы хотите создать экземпляр, подобный этому.

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