すべてがピンと来た瞬間に、プロジェクトは楽しいと考えてください。クラス、メソッド、プロパティがどのように機能するかを把握するために、クライアント フレンドリーな CLI プロジェクトを構築しました。
私のディレクトリ構造は非常に単純でした:
└── リブ
§── モデル
│ §── __init__.py
│ └──actor.py
| └── movie.py
§── cli.py
§── debug.py
└── helpers.py
§── ピップファイル
§── Pipfile.lock
§── README.md
構造からわかるように、俳優が多数のムービーを持つ 1 対多の関連付けを構築しました。この連想から私のメニューが誕生しました。
上記のメニューは、ユーザーに 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 サイトの他の関連記事を参照してください。