2009-07-30 14 views
7

Czy w języku Python można utworzyć instancję klasy za pomocą słownika?Słownik z ćwiczeniami?

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

x = shapes[raw_input()] 

Chcę pozwolić użytkownikowi wybrać z menu, a nie kodować wielkich instrukcji if na wejściu. Na przykład, jeśli użytkownik wprowadził 2, x byłby nowym instancją Circle. czy to możliwe?

+0

Kiedy próbował go, co się stało? –

+0

Cóż, robię to z menu, i po prostu o ogólnym opakowaniu menu, jakie menu do załadowania. Jestem bardzo nowy w tym: -/ – mandroid

+1

Tak, jest to możliwe, i robisz to dobrze, PROVIDED, że chcesz utworzyć wszystkie kształty raz na początku, przechowywać wystąpienia w dykcie i mieć jedną z nich przypisaną do x . Jeśli chcesz tylko utworzyć instancję wybranej klasy lub planujesz kilka razy tworzyć poszczególne kształty, użyj czegoś podobnego do odpowiedzi Vinaya. – Markus

Odpowiedz

23

Prawie. Co chcesz jest

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. 
+0

wow. Nie wiem, czy możemy to zrobić. to jest pyton. dziękuję vinay sajip ... –

1

Polecam funkcję Chooser:

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