質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.92%

pythonのargparseについてです。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 841

kabatiro

score 20

 pythonのargparseを理解したい!

いつも回答者さんには感謝しています。質問の連投失礼します。

 下記のコードに関してです。

import argparse
parser = argparse.ArgumentParser(
                prog = 'argparseTest.py',
                usage = 'Demonstration of argparser',
                description = 'description',
                epilog = 'end',
                add_help = True,
                )
args = parser.parse_args()

 質問1

上のコードの

args = parser.parse_args()


の代わりに、

parser.parse_args()


を入れてみたところ、Namespace()と出力されました。これはどういう意味なのでしょうか。

 質問2

print(argparse.ArgumentParser().parse_args)
<bound method ArgumentParser.parse_args of 
ArgumentParser(prog='', usage=None, description=None, 
formatter_class=<class 'argparse.HelpFormatter'>,
 conflict_handler='error', add_help=True)>
print(argparse.ArgumentParser.parse_args())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: parse_args() missing 1 required positional argument: 'self'


上のようにprintしてみたのですが、どのような経緯でこのようなエラーが出たのかわかりませんでした。とても質問がややこしくなってしまっているのですが、二つの質問について、お分かりになる方がいらっしゃいましたら、ご教授願います。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

 pythonのargparseを理解したい!

本当に理解したいのなら、人に聞くのではなく自分で勉強してください。あなたが完全に理解するまで付き合ってくれる人はいません(お金を払えば教えてくれる人はいるかもしれません)。

まずはpythonのクラスやモジュール、パッケージの仕組みについて理解してください。体系的に書いてある入門書を調べて購入し、読み込んだほうが良いでしょう。

次に、argparseのドキュメントも読んでください。

16.4. argparse — コマンドラインオプション、引数、サブコマンドのパーサー — Python 3.6.5 ドキュメント


 質問1

parser.parse_args()


を入れてみたところ、Namespace()と出力されました。これはどういう意味なのでしょうか。

printがないと出力されないと思いますが?

それはともかく、parse_args()はNamespace オブジェクトを返します。

16.4. argparse — コマンドラインオプション、引数、サブコマンドのパーサー — Python 3.6.5 ドキュメント | 16.4.4.6. Namespace オブジェクト

属性を使って引数にアクセスできるようになるということですね。

 質問2

pythonのインスタンスメソッドは第一引数にオブジェクトのインスタンス自身を取る、という形で定義されています。ArgumentParserをインスタンス化しないとそのオブジェクトのインスタンスが渡らないので、「引数selfがない」というエラーになります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/05 14:27

    確かに私はまだ体系的な勉強が不足していました。argparseドキュメントを読んで自分なりにまた理解を深めたいと思います。にも関わらず、一つ一つ質問に答えていただきありがとうございます。

    キャンセル

  • 2018/10/05 14:28

    ドキュメントは言語仕様わかっていないと読めないので、まずはpythonのクラスとかの仕組みを覚えるのが先ですね

    キャンセル

  • 2018/10/05 14:33

    私はクラスなど文法部分のあやふやな部分がとても多いことに前の質問で気がつきました。勉強の指針のご提示ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る