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ü.
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.
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.
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.
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