すべてがクリックされた瞬間に、プロジェクトは楽しいと考えてください。クラス、メソッド、プロパティがどのように機能するかを理解するために、クライアント フレンドリーな 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 クラスのコード ブロックを見てください:
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 のスキルを高めるための良い練習になりました。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3