初めてのCLI。

Patricia Arquette
リリース: 2024-10-03 06:24:30
オリジナル
381 人が閲覧しました

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

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

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 クラスのコード ブロックを見てください。

   def movies(self):
        from models.movie import Movie
        sql = """
            SELECT * FROM movie
            WHERE actor_id = ?
        """
        CURSOR.execute(sql, (self.id,),)

        rows = CURSOR.fetchall()
        return [
            Movie.instance_from_db(row) for row in rows
        ]
ログイン後にコピー

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

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

以上が初めてのCLI。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート