首页 > 后端开发 > Python教程 > 我的第一个 CLI。

我的第一个 CLI。

Patricia Arquette
发布: 2024-10-03 06:24:30
原创
383 人浏览过

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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板