一旦一切順利,就認為這個專案很有趣。我建立了一個客戶端友善的 CLI 專案來掌握類別、方法和屬性的工作原理。
我的目錄結構非常簡單:
└── lib
├── 型號
│ ├── __init__.py
│ └── actor.py
| └── 電影.py
├── cli.py
├── 調試.py
└── helpers.py
├── Pipfile
├── Pipfile.lock
├── README.md
正如您從結構中看到的,我建立了一個一對多關聯,其中一個演員有很多電影。從這個協會我的菜單開始發揮作用。
上面的選單是由一個名為... 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 中的索引,從而允許所有列表通過項目,從而獲得外觀和順序的好處成為一個有序列表。
我們的兩個主要角色當然是演員類和電影類。在建立、更新或刪除特定類別的實例時,兩者在類別方法方面都包含相似的程式碼,但存在差異:
以我們的 Movie 類別為例:
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 技能。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3