比方說,在使用argparse解析我的命令行後,我有一個args
命名空間。現在,我想用這個來創建這樣一些對象:使用argparse參數作爲關鍵字參數
foo = Foo(bar=args.bar)
不幸的是,我有如果關鍵字參數設置的限制,它不能是None
。現在,我需要檢查,如果args.bar
設置並採取相應的行動:
if args.bar:
foo = Foo(bar=args.bar)
else:
foo = Foo()
這是笨重且不能擴展爲多個參數。我想吃點什麼,是這樣的:
foo = Foo(**args.__dict__)
但仍從我最初的問題的困擾,另外對於不屬於__init__
方法的關鍵字參數鍵不起作用。有沒有一個很好的方法來實現這些東西?
什麼args._get_kwargs'和'ARGS .__ dict__''之間的區別? – mgilson 2013-03-01 15:47:10
@mgilson - 你讓我檢查:沒有真正的:)'def _get_kwargs(self): return sorted(self .__ dict __。items())''。但是,我猜想如果模塊維護者曾向'_AttributeHolder'添加非關鍵字屬性,'Namespace'的基類,他/她/他們可能會將它們從'_get_kwargs'中排除。 – isedev 2013-03-01 15:48:39
在這種情況下,也許你應該使用'args .__ dict __。items()'。 'args .__ dict__'被保證存在(因爲'Namespace'沒有辦法知道它會提前有什麼參數,所以它不能實現'__slots__',據我所知)。而且,我想,如果你真的是偏執狂,你可以繼承'Namespace'並將其傳遞給'parse_args'。 – mgilson 2013-03-01 15:51:52