2011-11-01 12 views
23

Questo è veramente un paio di domande:Namespace, argparse, e l'uso di

  1. C'è una ragione argparse utilizza uno spazio dei nomi al posto di un dizionario?

  2. Supponendo di avere una classe con __init__(self, init_method, *args). Il parametro init_method dice a init_function quale modo voglio inizializzare la classe, mentre il parametro arg dà tutti gli argomenti necessari per l'init. Gli argomenti possono essere diversi per diversi metodi. Dovrei usare un dizionario o uno spazio dei nomi?

  3. Supponendo che io usi uno spazio dei nomi, come posso passare lo spazio dei nomi a __init__()?

risposta

19
  1. I progettisti di arparse apparentemente ritenuto che sarebbe stato più conveniente per accedere argomenti come

    args.arg_name 
    

    piuttosto che

    args["arg_name"] 
    

    Questa potrebbe essere una questione di gusti, anche se . Sarei felicemente andato con il dizionario, soprattutto considerando che non esiste una classe Namespace nella libreria standard, tranne quella in argparse.

  2. Utilizzare un dizionario.

  3. Se si desidera veramente uno spazio dei nomi qui, è possibile utilizzare init_function(**args.__dict__) ... ma io non lo consiglio.

67

E 'facile convertire un Namespace in un dizionario con vars():

>>> vars(args) 
+1

Sto usando questo modo che io possa avere un modulo che è o un'utility stand-alone o una funzione . Ottenendo argomenti da argparse, posso chiamare: my_func (** vars (parser.args)), a patto che i nomi dei miei parametri corrispondano ai nomi che definisco in argparse –