Выбор аргумента из списка при инициализации экземпляра класса

Предположим, есть список доступных рас персонажа.

Как при инициализации реализовать выбор из существующего списка, что бы исключить опечатки и прочие связанные с этим трудности?

race_list = ['Orc','Elf','Human']
class Hero:
    def __init__(self,race):
        self.race = race

У меня есть идея вывести список рас и предложить выбор:

class Hero:
    def __init__(self,race=int(input('Выберите расу героя:\n1: Orc\n2: Elf\n3: Human\n'))):
        self.race = race_list[race - 1]

Anduin = Hero()

Есть ли более элегантный метод реализации?


Ответы (1 шт):

Автор решения: Vasily

Я бы сделал так:

  1. Сделал бы базовый класс BaseRace

  2. Для каждой рассы создавал бы класс, унаследованный от BaseRace (По хорошему нужна фабрика классов)

  3. Рассу бы принимал из input-а или откуда угодно, создавая соответствующий экземпляр класса

  4. В вашем классе в init проверял бы через issubclass проверял бы, что расса это один из существующих классов:

def __init__(self, race):
assert issubclass(race, BaseRace)
→ Ссылка