„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Mein erstes CLI.

Mein erstes CLI.

Veröffentlicht am 03.11.2024
Durchsuche:435

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 recht 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 Liste der Akteure
  2. Schauspieler hinzufügen
  3. Schauspieler löschen
  4. Programm verlassen

Mein Menü oben wurde durch eine Funktion namens...menu() definiert, die sich in meiner cli.py-Datei zusammen mit main() befand, das 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 besonders 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 als 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.

Sehen 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 lässt sich unsere Methode movies() alle Filme abrufen, die der aktuellen Actor-Instanz zugeordnet sind, 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.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/wormondeck/my-first-cli-2if?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3