2009-07-30 4 views
7

In Python è possibile creare un'istanza di una classe attraverso un dizionario?Dizionario con classi?

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

x = shapes[raw_input()] 

Voglio consentire all'utente di scegliere un menu e non codificare istruzioni if ​​if enormi sull'input. Ad esempio se l'utente ha inserito 2, x sarebbe quindi una nuova istanza di Circle. È possibile?

+0

quando si è tentato di esso, cosa è successo? –

+0

Beh, lo sto facendo con i menu, e solo avendo un generico wrapper di menu gestisco il menu da caricare. Sono molto nuovo a questo: -/ – mandroid

+1

Sì, è possibile, e lo stai facendo bene FORNITO vuoi istanziare tutte le forme una volta all'inizio, memorizzare le istanze nel dict e assegnarne una a x . Se vuoi solo istanziare la classe selezionata, o pianifichi di istanziare le singole forme più volte, usa qualcosa come la risposta di Vinay. – Markus

risposta

23

Quasi. Quello che vuoi è

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. non so che possiamo farlo. è così pignolo. grazie vinay sajip ... –

1

mi consiglia una funzione di selezione:

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