2017-06-21 37 views
0

在一個項目中,我看到下面的使用add_argument()Python argparse,add_argument,type = <some function>而不是int?

其中 make_arg_instance
parser = argparse.ArgumentParser() 
parser.add_argument("--somearg",type=make_arg_instance,help='blahblahblah') 
args = parser.parse_args() 
i = args.somearg.somefunction() 

是定義一個函數爲:

def make_arg_instance(): 
    somearg = SomeClassName() 
    return somearg 

看來參數「somearg」是class對象,而不是int這就是爲什麼後面調用方法的原因,如i = args.somearg.somefunction()

在我所見過的參數類型最教程總是int因此有人能簡要介紹一下如何添加class型或大於int其他任何類型的參數?謝謝!

+0

當然'make_arg_instance()'接受一個參數,它不會是一個帶有0個參數的函數。 –

回答

2

documentation for the type argument

默認情況下,ArgumentParser對象爲簡單的字符串讀取命令行參數。但是,經常將命令行字符串解釋爲另一種類型,如floatinttype關鍵字參數add_argument()允許執行任何必需的類型檢查和類型轉換。

[...]

type=可以採取採用單個字符串參數並返回轉換值

可以在任何可調用傳遞任何可調用,只要它只有一個參數被轉換。 int()是這樣一個可調用的,但這並不意味着你必須使用它。如果您想要某些其他類型或想要對允許的值應用額外約束,則可以指定您自己的值。

相關問題