2009-07-30 10 views
7

En Python, ¿es posible instanciar una clase a través de un diccionario?Diccionario con clases?

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

x = shapes[raw_input()] 

Quiero dejar que el usuario elija de un menú y no codificar grandes declaraciones if else en la entrada. Por ejemplo, si el usuario ingresó 2, x sería una nueva instancia de Círculo. es posible?

+0

Cuando has probado, ¿qué pasó? –

+0

Bueno, lo estoy haciendo con los menús, y simplemente tener un contenedor de menú genérico maneja qué menú cargar. Soy muy nuevo en esto: -/ – mandroid

+1

Sí, es posible, y lo está haciendo bien PROPORCIONADO, quiere crear una instancia de todas las formas una vez al principio, almacene las instancias en el diccionario y tenga una de ellas asignada a x . Si solo desea crear una instancia de la clase seleccionada o planea crear instancias individuales varias veces, use algo como la respuesta de Vinay. – Markus

Respuesta

23

Casi. Lo que queremos es

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. No sé si podemos hacer eso. eso es tan pitónico. gracias vinay sajip ... –

1

lo recomiendo una función de selector:

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