Лучший способ вернуть классы из соответствующих строк - PullRequest
0 голосов
/ 25 ноября 2018

Я пишу фантастический язык программирования для игры.Часть того, что делает интерпретатор, - это преобразование кода (строки) в объекты команд.Например, следующий код:

set var 1

создает переменную с именем var со значением 1. В интерпретаторе это создает новый экземпляр класса команды Set.В настоящее время у меня есть список операторов if для создания команд:

    if packet == "set":
        return commands.Set
    elif packet == "get":
        return commands.Get
    elif packet == "print":
        return commands.Print
    elif packet == "goto":
        return commands.Goto
    elif packet == "add":
        return commands.Add

Но это настоящая боль при добавлении новых команд.Я должен добавить класс команды, добавить его в список синтаксиса и добавить его в таблицу здесь.

Я понял, что eval может помочь мне здесь, но я знаю, что на это смотрят свысока.

return eval("commands." + packet.capitalize())

Есть ли лучший способ сделать это, или eval хорошо в этом использовании?

1 Ответ

0 голосов
/ 25 ноября 2018

Попробуйте это:

return getattr(commands, packet.capitalize())
...