[解決済み】Python argparse.Namespace()を辞書として処理する正しい方法は何ですか?
2022-03-29 08:23:30
質問
の結果を利用したい場合
argparse.ArgumentParser()
である。
Namespace
オブジェクトで、辞書またはマッピングのようなオブジェクトを期待するメソッドを持ちます (
コレクション・マッピング
)、どのようにするのが正しいのでしょうか?
C:\>python
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import argparse
>>> args = argparse.Namespace()
>>> args.foo = 1
>>> args.bar = [1,2,3]
>>> args.baz = 'yippee'
>>> args['baz']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'Namespace' object has no attribute '__getitem__'
>>> dir(args)
['__class__', '__contains__', '__delattr__', '__dict__', '__doc__', '__eq__', '_
_format__', '__getattribute__', '__hash__', '__init__', '__module__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__
', '__str__', '__subclasshook__', '__weakref__', '_get_args', '_get_kwargs', 'ba
r', 'baz', 'foo']
オブジェクトの中に手を入れて、そのオブジェクトを使用することは適切でしょうか?
__dict__
プロパティは?
私は、答えはノーだと思います。
__dict__
は、実装のための規約のような匂いがしますが、インターフェイスのための規約ではありません。
__getattribute__
または
__setattr__
または
__contains__
のようです。
解決方法は?
ネームスペースの辞書にアクセスするには vars() :
>>> import argparse
>>> args = argparse.Namespace()
>>> args.foo = 1
>>> args.bar = [1,2,3]
>>> d = vars(args)
>>> d
{'foo': 1, 'bar': [1, 2, 3]}
必要であれば、辞書を直接修正することができます。
>>> d['baz'] = 'store me'
>>> args.baz
'store me'
はい、__dict__ 属性にアクセスしても問題ありません。 これは十分に定義され、テストされ、保証された動作です。
関連
-
PythonによるLeNetネットワークモデルの学習と予測
-
PicgoのイメージベッドツールをPythonで実装する
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み】__str__と__repr__の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
任意波形を生成してtxtで保存するためのPython実装
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み] データ型が理解できない
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法