2011-11-01 21 views
23

Esto es realmente un par de preguntas:espacio de nombres, argparse, y el uso

  1. ¿Hay alguna razón argparse utiliza un espacio de nombres en lugar de un diccionario?

  2. Suponiendo que tengo una clase con __init__(self, init_method, *args). El parámetro init_method le dice a init_function de qué manera quiero inicializar la clase, mientras que el parámetro arg proporciona todos los argumentos necesarios para el init. Los argumentos pueden ser diferentes para diferentes métodos. ¿Debo usar un diccionario o un espacio de nombres?

  3. Suponiendo que uso un espacio de nombres, ¿cómo paso el espacio de nombres a __init__()?

Respuesta

19
  1. Los diseñadores de arparse aparentemente consideraron que sería más conveniente para acceder a los argumentos como

    args.arg_name 
    

    en lugar de

    args["arg_name"] 
    

    Esto podría ser una cuestión de gustos, aunque . Me hubiera ido felizmente con el diccionario, especialmente dado el hecho de que no existe una clase Namespace en la biblioteca estándar, excepto la que está en argparse.

  2. Utilice un diccionario.

  3. Si realmente quiere un espacio de nombre aquí, puede usar init_function(**args.__dict__) ... pero no lo recomiendo.

67

Es fácil convertir un espacio de nombres en un diccionario utilizando vars():

>>> vars(args) 
+1

estoy usando esta para que pueda tener un módulo que es o bien una utilidad independiente o una función . Obteniendo args de argparse, puedo invocar: my_func (** vars (parser.args)), siempre que haga que mis nombres de parámetros coincidan con los nombres que defino en argparse –

Cuestiones relacionadas