Как только все получится, считайте проект интересным. Я создал удобный для клиента проект CLI, чтобы понять, как работают классы, методы и свойства.
Моя структура каталогов была довольно простой:
└── библиотека
├── модели
│ ├── __init__.py
│ └── act.py
| └── movie.py
├── cli.py
├── debug.py
└── helpers.py
├── Пип-файл
├── Pipfile.lock
├── README.md
Как вы можете видеть из структуры, я построил ассоциацию «один ко многим», где у актера есть много фильмов. Из этой ассоциации и появилось мое меню.
Мое меню выше было определено функцией...menu(), которая находилась в моем файле cli.py вместе с main(), которая показывает пользователю меню CLI:
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
Поскольку у нас есть настройка проекта, в которой у актера есть много фильмов, наш класс фильма будет иметь уникальный параметр/атрибут act_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 ]
Здесь наш метод Movies() извлекает все фильмы, связанные с текущим экземпляром актера, путем запроса таблицы фильмов с использованием идентификатора актера. Затем это вернет список объектов Movie, устанавливая связь «имеет много» между Actor и Movie.
Обсуждаемые блоки кода были основными областями проекта, в которых я сосредоточился на более глубоком понимании. В целом этот проект послужил хорошим упражнением для улучшения моих навыков работы с Python.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3