[解決済み] Pythonの名前空間(argparse.parse_argsの値)を作成するにはどうすればよいですか?
2022-03-10 11:12:44
質問
Python スクリプトをインタラクティブにテストするために、私は
Namespace
オブジェクトを返します。
argparse.parse_args()
.
明白な方法です。
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.parse_args()
Namespace()
>>> parser.parse_args("-a")
usage: [-h]
: error: unrecognized arguments: - a
Process Python exited abnormally with code 2
は、Python repl が (上記のように) 愚かなエラーで終了してしまうかもしれません。
だから 与えられた属性のセットを持つPythonの名前空間を作成する最も簡単な方法は何でしょうか?
例えば
dict
をその場で実行することができます (
dict([("a",1),("b","c")])
) として使用することはできませんが
Namespace
:
AttributeError: 'dict' object has no attribute 'a'
解決方法は?
簡単なクラスを作成することができます。
class Namespace:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
と全く同じように動作します。
argparse
Namespace
クラスの属性について説明します。
>>> args = Namespace(a=1, b='c')
>>> args.a
1
>>> args.b
'c'
または、単に
クラスをインポートする
から利用可能です。
argparse
モジュールを使用します。
from argparse import Namespace
args = Namespace(a=1, b='c')
Python 3.3の時点では、この他に
types.SimpleNamespace
これは本質的に同じことをする。
>>> from types import SimpleNamespace
>>> args = SimpleNamespace(a=1, b='c')
>>> args.a
1
>>> args.b
'c'
この2つのタイプは区別されます。
SimpleNamespace
は、主に
sys.implementation
属性とその返り値である
time.get_clock_info()
.
さらに比較する。
-
どちらのクラスも、同じクラスの2つのインスタンスについて、等値性テストをサポートしています。
instance_a == instance_b
は、同じ属性で同じ値を持つ場合に真となります。 -
どちらのクラスも、役に立つ
__repr__
を使用して、どのような属性を持っているかを示します。 -
Namespace()
オブジェクトは封じ込めテストに対応しています。'attrname' in instance
は、名前空間インスタンスが属性 namend を持つ場合、真となります。attrname
.SimpleNamespace
はしません。 -
Namespace()
オブジェクトには、文書化されていない._get_kwargs()
のソートされたリストを返すメソッドです。(name, value)
の属性は、そのインスタンスの どちらのクラスでも、同じものを得るにはsorted(vars(instance).items())
. -
一方
SimpleNamespace()
はC言語で実装されNamespace()
がPythonで実装されている場合、属性アクセスはどちらも同じ__dict__
ストレージに保存されます。等値性テストと表現の生成はSimpleNamespace()
インスタンスになります。
関連
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
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つのデコレーターを解説
-
PythonはWordの読み書きの変更操作を実装している
-
Python百行で韓服サークルの画像クロールを実現する
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法