一旦一切顺利,就认为这个项目很有趣。我构建了一个客户端友好的 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