tkargs.py 技術ドキュメント

このドキュメントは、Pythonライブラリ tkargs.py のソースコードを解析し、その機能、使用方法、および内部構造を詳細に説明します。

ライブラリの機能や目的

tkargs.py は、Python標準ライブラリの argparse.ArgumentParser と、外部ライブラリ tklibtkObject クラスを継承して作られたカスタムコマンドライン引数パーサーです。

主な目的と機能は以下の通りです。

  • コマンドライン引数解析の拡張: argparse.ArgumentParser の強力な機能を継承しつつ、独自のヘルパーメソッドを提供することで、コマンドライン引数の定義を簡素化します。

  • プログラムメタ情報の管理: プログラムのファイル名、パス、バージョン、作者、作成日、最終更新日といったメタデータを一元的に管理できます。これにより、自己記述的なプログラムの作成を支援します。

  • オブジェクト管理機能との統合: tkObject を継承することで、一般的なオブジェクト管理機能(例えば、オブジェクトの属性を表示する機能など)とコマンドライン引数パーサーを統合します。これにより、大規模なアプリケーションにおいて、コマンドライン引数も他の設定と同様に管理しやすくなります。

  • 型指定ヘルパー: float 型や int 型の引数を追加するための専用メソッド add_floatargadd_intarg を提供し、引数定義の簡潔さを向上させます。

このライブラリは、特に tklib エコシステム内で、アプリケーションの起動時オプションを柔軟に設定し、同時にプログラム自身の詳細情報を提供する必要がある場面で役立ちます。

importする方法

tkargs.py を他のPythonプログラムからインポートするには、以下のステートメントを使用します。

from tkargs import tkArgs

必要な非標準ライブラリとインストール方法

tkargs.py は、以下の非標準ライブラリに依存しています。

  • tklib

このライブラリをインストールするには、pip コマンドを使用します。

pip install tklib

importできる変数と関数

tkargs.py からインポートできる主要な要素は tkArgs クラスです。

class tkArgs

argparse.ArgumentParsertklib.tkobject.tkObject を継承したクラスで、プログラムのメタ情報とコマンドライン引数管理機能を提供します。

このクラスには以下のメソッドが含まれます。

__init__(self, program_file = None, program_path = None, version = None, author = None, creation_date = None, last_update_date = None, **kwargs)

  • 動作: tkArgs オブジェクトを初期化します。プログラムのファイル名、パス、バージョン、作者、作成日、最終更新日などのメタデータを設定します。program_file が指定されない場合、sys.argv[0] を使用します。kwargstkObjectupdate メソッドに渡されます。

  • 引数:

    • program_file (str, optional): プログラムのファイル名。デフォルトは None

    • program_path (str, optional): プログラムのパス。デフォルトは None

    • version (str, optional): プログラムのバージョン。デフォルトは None

    • author (str, optional): プログラムの作者。デフォルトは None

    • creation_date (str, optional): プログラムの作成日。デフォルトは None

    • last_update_date (str, optional): プログラムの最終更新日。デフォルトは None

    • **kwargs: tkObjectupdate メソッドに渡される任意のキーワード引数。

  • 戻り値: なし。

initialize(self, **kwargs)

  • 動作: argparse.ArgumentParser のコンストラクタを呼び出して、引数パーサーのコア部分を初期化します。このメソッドは、tkArgs オブジェクトが生成された後、具体的な引数パーサーの設定を行うために使用されます。

  • 引数:

    • **kwargs: argparse.ArgumentParser のコンストラクタに渡される任意のキーワード引数。

  • 戻り値: なし。

__str__(self)

  • 動作: tkArgs オブジェクトの文字列表現を返します。この実装では、self.method 属性の値を使用して文字列を生成します。self.method がオブジェクトに設定されていない場合、AttributeError が発生する可能性があります。

  • 引数: なし。

  • 戻り値: (str) "optimization object by {self.method}" の形式の文字列。

add_arg(self, key1, key2 = None, nargs = '?', **kwargs)

  • 動作: コマンドライン引数をパーサーに追加します。これは argparse.ArgumentParser.add_argument のラッパーであり、内部的に checkkwargs メソッドを呼び出して引数の前処理を行います。

  • 引数:

    • key1 (str): 引数名(例: -f または filename)。

    • key2 (str, optional): 2番目の引数名(例: --file)。ショートオプションとロングオプションの両方を定義する場合に利用されます。デフォルトは None

    • nargs (str, optional): argparsenargs パラメータ(例: '?', '*', '+')。デフォルトは '?'

    • **kwargs: argparse.ArgumentParser.add_argument に渡されるその他のキーワード引数(例: help, action, default)。

  • 戻り値: なし。

add_floatarg(self, key1, key2 = None, nargs = '?', type = float, **kwargs)

  • 動作: 型が float に設定されたコマンドライン引数をパーサーに追加します。add_arg メソッドの特殊なケースであり、引数の型を明示的に float に設定します。

  • 引数:

    • key1 (str): 引数名。

    • key2 (str, optional): 2番目の引数名。デフォルトは None

    • nargs (str, optional): argparsenargs パラメータ。デフォルトは '?'

    • type (type, optional): 引数の型。デフォルトは float

    • **kwargs: argparse.ArgumentParser.add_argument に渡されるその他のキーワード引数。

  • 戻り値: なし。

add_intarg(self, key1, key2 = None, nargs = '?', type = int, **kwargs)

  • 動作: 型が int に設定されたコマンドライン引数をパーサーに追加します。add_arg メソッドの特殊なケースであり、引数の型を明示的に int に設定します。

  • 引数:

    • key1 (str): 引数名。

    • key2 (str, optional): 2番目の引数名。デフォルトは None

    • nargs (str, optional): argparsenargs パラメータ。デフォルトは '?'

    • type (type, optional): 引数の型。デフォルトは int

    • **kwargs: argparse.ArgumentParser.add_argument に渡されるその他のキーワード引数。

  • 戻り値: なし。

内部ヘルパーメソッド

checkkwargs(self, nargs = '?', **kwargs)

  • 動作: add_arg ファミリーのメソッドに渡されるキーワード引数を前処理する内部ヘルパーです。特に action='version' が指定されている場合は nargs の変更を避け、それ以外の場合は nargs をデフォルト値 '?' または指定された値に設定します。このメソッドは、argparse の引数定義の柔軟性を高めるために利用されます。

  • 引数:

    • nargs (str, optional): argparsenargs パラメータ。デフォルトは '?'

    • **kwargs: argparse.ArgumentParser.add_argument に渡される任意のキーワード引数。

  • 戻り値: (dict) 更新されたキーワード引数の辞書。

main scriptとして実行したときの動作

tkargs.py のソースコードには、if __name__ == '__main__': ブロックが含まれていません。 したがって、このファイルを直接Pythonインタープリタで実行しても、特別な動作は行われません。tkargs.py は、他のプログラムからインポートされて使用されることを前提としたライブラリとして設計されています。