Heim  >  Artikel  >  Backend-Entwicklung  >  Mein erstes CLI.

Mein erstes CLI.

Patricia Arquette
Patricia ArquetteOriginal
2024-10-03 06:24:30352Durchsuche

My first CLI.

Vorspann

In der Sekunde, in der alles klappt, denken Sie darüber nach, dass das Projekt Spaß macht. Ich habe ein kundenfreundliches CLI-Projekt erstellt, um zu verstehen, wie eine Klasse, Methoden und Eigenschaften funktionieren.

Meine Verzeichnisstruktur war ganz einfach:

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

Wie Sie der Struktur entnehmen können, habe ich eine Eins-zu-Viele-Zuordnung aufgebaut, bei der ein Schauspieler viele Filme hat. Aus dieser Assoziation entstand mein Menü.

  1. Aktuelle Schauspielerliste
  2. Schauspieler hinzufügen
  3. Schauspieler löschen
  4. Beenden Sie das Programm

Mein Menü oben wurde durch eine Funktion namens...menu() definiert, die sich in meiner cli.py-Datei zusammen mit main() befand, die dem Benutzer das CLI-Menü anzeigt:

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

Diese spezielle Funktion war die erste von vielen, bei der eine While-Schleife zusammen mit if/elif/else-Anweisungen ausgeführt wurde, um unserem Benutzer die Möglichkeit zu geben, einfacher durch unsere Menüs zu navigieren.

Die cli.py wird dann mit einem wichtigen Codeblock abgeschlossen:

if __name__ == "__main__":
    main() 

Dieser Codeblock weist unseren Interpreter (Python) an, unsere Datei nur dann auszuführen, wenn sie über die Befehlszeile aufgerufen wird.

Nebendarsteller

An diesem Projekt waren auch Hilfsfunktionen beteiligt, die neben if/elif/else-Anweisungen auch eine While-Schleife verwendeten. Einer zeichnet sich insbesondere durch die einfache Navigation aus, beispielsweise bei der Auswahl unserer aktuellen Schauspielerliste:

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

Hier habe ich mich nicht nur an die while-Schleife und if-Anweisungen gewöhnt, sondern auch die Vorteile von Aussehen und Reihenfolge genutzt, indem ich enumerate() mit einer for-Schleife verwendet habe, um mit einem Index in Python zu iterieren und alle Listen im gesamten Projekt zu ermöglichen eine geordnete Liste sein.

Zeigen Sie etwas Klasse

Unsere beiden Hauptcharaktere sind natürlich die Klassen Schauspieler und Film. Beide bestehen hinsichtlich der Klassenmethoden beim Erstellen, Aktualisieren oder Löschen einer Instanz dieser bestimmten Klasse aus ähnlichem Code, es gibt jedoch Unterschiede:

Nehmen wir zum Beispiel unseren Filmkurs:

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

Da wir unser Projekt so eingerichtet haben, dass ein Schauspieler viele Filme hat, verfügt unsere Filmklasse über einen eindeutigen Parameter/Attribut „actor_id“, um eine Verknüpfung zwischen der Filminstanz und einem bestimmten Schauspieler herzustellen und so einen einfachen Verweis auf die Informationen des Schauspielers zu ermöglichen.

Schauen Sie sich nun diesen Codeblock in unserer Actor-Klasse an:

   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
        ]

Hier ruft unsere Methode movies() alle mit der aktuellen Actor-Instanz verknüpften Filme ab, indem sie die Filmtabelle anhand der ID des Schauspielers abfragt. Dadurch wird dann eine Liste von Filmobjekten zurückgegeben, wodurch eine „Hat-viele“-Beziehung zwischen Schauspieler und Film hergestellt wird.

Die besprochenen Codeblöcke waren die Hauptbereiche des Projekts, in denen ich mich darauf konzentrierte, mehr Verständnis zu erlangen. Insgesamt war dieses Projekt eine gute Übung, um meine Python-Kenntnisse zu verbessern.

Das obige ist der detaillierte Inhalt vonMein erstes CLI.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn