Словарь с занятиями? - PullRequest
8 голосов
/ 30 июля 2009

В Python возможно ли создать экземпляр класса через словарь?

shapes = {'1':Square(), '2':Circle(), '3':Triangle()}

x = shapes[raw_input()]

Я хочу позволить пользователю выбирать из меню, а не кодировать огромные операторы if else на входе. Например, если пользователь ввел 2, то x будет новым экземпляром Circle. Возможно ли это?

Ответы [ 2 ]

24 голосов
/ 30 июля 2009

Почти. То, что вы хотите, это

shapes = {'1':Square, '2':Circle, '3':Triangle} # just the class names in the dict

x = shapes[raw_input()]() # get class from dict, then call it to create a shape instance.
1 голос
/ 31 июля 2009

Я бы порекомендовал функцию выбора:

def choose(optiondict, prompt='Choose one:'):
    print prompt
    while 1:
        for key, value in sorted(optiondict.items()):
            print '%s) %s' % (key, value)
        result = raw_input() # maybe with .lower()
        if result in optiondict:
            return optiondict[result]
        print 'Not an option'

result = choose({'1': Square, '2': Circle, '3': Triangle})()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...