「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 初めてのCLI。

初めてのCLI。

2024 年 11 月 3 日に公開
ブラウズ:417

My first CLI.

オープニングクレジット

すべてがクリックされた瞬間に、プロジェクトは楽しいと考えてください。クラス、メソッド、プロパティがどのように機能するかを理解するために、クライアント フレンドリーな CLI プロジェクトを構築しました。

私のディレクトリ構造は非常に単純でした:

└── リブ
§── モデル
│ §── __init__.py
│ └──actor.py
| └── movie.py
§── cli.py
§── debug.py
└── helpers.py
§── ピップファイル
§── Pipfile.lock
§── README.md

構造からわかるように、俳優が多数のムービーを持つ 1 対多の関連付けを構築しました。この連想から私のメニューが生まれました。

  1. 現在の俳優リスト
  2. アクターを追加
  3. アクターを削除
  4. プログラムを終了します

上記の私のメニューは、ユーザーに CLI メニューを表示する main() とともに私の cli.py ファイルにある... menu() という関数によって定義されています:

def main():
    while True:
        welcome()
        menu()
        choice = input("> ").strip()
        if choice == "1":
            actor_list()
        elif choice == "2":
            add_actor()
        elif choice == "3":
            delete_actor()
        elif choice == "4":
            exit_program()
            break
        else:
            print("Invalid choice. Try again.\n")

この特定の関数は、ユーザーがメニューを簡単にナビゲートできるようにするために、if/elif/else ステートメントとともに while ループが実行される多くの関数の最初のものです。

その後、cli.py はいくつかの重要なコード ブロックで終わります:

if __name__ == "__main__":
    main() 

このコード ブロックは、コマンド ラインから呼び出された場合にのみファイルを実行するようにインタープリター (Python) に指示します。

助演キャスト

このプロジェクトには、if/elif/else ステートメントとともに while ループを使用するヘルパー関数もありました。特に、現在のアクターのリストを選択する際のナビゲーションのしやすさが際立っています:

def actor_list():

        actor_list = Actor.get_all()

        if actor_list:
            print("\n*** UPDATED LIST! ***")
            for i, actor in enumerate(actor_list, start=1):
                print(f"{i}. {actor.name}")  

            while True:
                choice = input("Press 'a' to add an actor\n"
                                "Press 'b' for actor profile\n"
                                "Press 'c' to return to the main menu.\n"
                                "Press 'd' delete an actor.\n").lower()
                if choice == 'a':
                    add_actor()
                    break
                elif choice == 'b':
                    actor_profile()
                    break
                elif choice == 'c':
                    return
                elif choice == 'd':
                    delete_actor()
                    break
                else:
                    print("Invalid choice. Please try again.") 
        else:
            print("List empty!")
            while True:
                choice = input("Press 'a' or to add an actor\n"
                        "Press 'b' for main menu.\n").lower()
                if choice == 'a':
                    add_actor()
                    break
                elif choice == 'b':
                    return
                else:
                    print("Invalid choice. Please try again.")

ここで、while ループと if ステートメントに慣れただけでなく、for ループで enumerate() を使用して Python のインデックスを反復処理することで、プロジェクト全体のすべてのリストを許可することで、外観と順序の利点も得られました。

順序付きリストになります。

一部のクラスを表示

もちろん、私たちの 2 人の主人公は、クラス アクターとムービーです。どちらも、特定のクラスのインスタンスを作成、更新、または削除するときのクラス メソッドという点では同様のコードで構成されていますが、次のような違いがあります。

映画クラスを例に見てみましょう:


クラスムービー: all_movies = {} def __init__(自分、映画、ジャンル、俳優ID、ID=なし): self.id = ID self.movi​​e = 映画 self.genre = ジャンル self.actor_id = アクター_id
class Movie:

    all_movies = {}

    def __init__(self, movie, genre, actor_id, id=None):
        self.id = id
        self.movie = movie
        self.genre = genre
        self.actor_id = actor_id
俳優に多くの映画があるプロジェクト設定があるため、映画クラスには映画インスタンスと特定の俳優の間のリンクを確立するための一意のactor_idパラメータ/属性があり、俳優の情報を簡単に参照できるようになります。

次に、Actor クラスのコード ブロックを見てください:


デフムービー(自分): models.movi​​eからムービーをインポート SQL = """ ムービーから * を選択 WHERE アクター ID = ? 「」 CURSOR.execute(sql, (self.id,),) 行 = CURSOR.fetchall() 戻る [ 行内の行の Movie.instance_from_db(row) ]
class Movie:

    all_movies = {}

    def __init__(self, movie, genre, actor_id, id=None):
        self.id = id
        self.movie = movie
        self.genre = genre
        self.actor_id = actor_id
ここでは、movie() メソッドで、アクターの ID を使用してムービー テーブルをクエリすることにより、現在の Actor インスタンスに関連付けられているすべてのムービーを取得します。これにより、Movie オブジェクトのリストが返され、Actor と Movie の間に「has-many」関係が確立されます。

ここで説明したコード ブロックは、私が理解を深められるように重点を置いたプロジェクトの主要な領域でした。全体として、このプロジェクトは Python のスキルを高めるための良い練習になりました。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/wormondeck/my-first-cli-2if?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3