首頁  >  文章  >  後端開發  >  我的第一個 CLI。

我的第一個 CLI。

Patricia Arquette
Patricia Arquette原創
2024-10-03 06:24:30352瀏覽

My first CLI.

片頭字幕

一切順利的那一刻,就認為這個專案很有趣。我建立了一個客戶端友善的 CLI 專案來掌握類別、方法和屬性的工作原理。

我的目錄結構很簡單:

└── lib
├── 模特兒
│ ├── __init__.py
│ └── actor.py
| └── movie.py
├── cli.py
├── debug.py
└── helpers.py
├── Pipfile
├── Pipfile.lock
├── README.md

正如您從結構中看到的,我建立了一個一對多關聯,其中一個演員有很多電影。從這個協會我的菜單開始發揮作用。

  1. 目前演員名單
  2. 新增演員
  3. 刪除演員
  4. 退出程序

上面的選單是由一個名為... menu() 的函數定義的,該函數位於我的 cli.py 檔案中,與向使用者顯示 CLI 選單的 main() 一起:

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")

這個特定的函數是執行 while 迴圈和 if/elif/else 語句的許多函數中的第一個,以使我們的使用者能夠輕鬆導航我們的選單。

然後 cli.py 以一些重要的程式碼區塊結束:

if __name__ == "__main__":
    main() 

此程式碼區塊告訴我們的解釋器 (Python) 僅在從命令列呼叫檔案時執行我們的檔案。

配角

這個專案中也涉及輔助函數,它們也使用了 while 迴圈以及 if/elif/else 語句。其中一個特別引人注目的是,在選擇我們目前的演員清單時顯示出導航的便利性:

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 語句,而且還通過使用enumerate() 和for 循環來迭代python 中的索引,從而允許所有列表通過項目,從而獲得外觀和順序的好處成為一個有序列表。

顯示一些類

我們的兩個主角當然是演員類和電影類。在建立、更新或刪除特定類別的實例時,兩者在類別方法方面都包含相似的程式碼,但也存在差異:

以我們的電影課為例:

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 之間建立「有多」關係。

討論的程式碼區塊是這個專案的主要領域,我專注於掌握更多理解。總的來說,這個專案是一個很好的練習,可以增強我的 Python 技能。

以上是我的第一個 CLI。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn