나의 첫 CLI.

Patricia Arquette
풀어 주다: 2024-10-03 06:24:30
원래의
384명이 탐색했습니다.

My first CLI.

오프닝 크레딧

모든 것이 클릭되는 순간 프로젝트가 재미있다고 생각하세요. 클래스, 메서드, 속성이 어떻게 작동하는지 파악하기 위해 클라이언트 친화적인 CLI 프로젝트를 구축했습니다.

내 디렉토리 구조는 매우 간단했습니다.

└── lib
├── 모델
│ ├── __init__.py
│ └── actor.py
| └── movie.py
├── cli.py
├── debug.py
└── helpers.py
├── 핍파일
├── Pipfile.lock
├── README.md

구조에서 볼 수 있듯이 저는 배우가 여러 영화를 보유하는 일대다 연결을 구축했습니다. 이 협회에서 내 메뉴가 등장했습니다.

  1. 현재 배우 목록
  2. 배우 추가
  3. 배우 삭제
  4. 프로그램 종료

위 메뉴는 사용자에게 CLI 메뉴를 표시하는 main()과 함께 내 cli.py 파일에 있는... menu()라는 함수로 정의되었습니다.

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")
로그인 후 복사

이 특정 기능은 사용자가 메뉴를 쉽게 탐색할 수 있도록 if/elif/else 문과 함께 while 루프를 실행한 많은 기능 중 첫 번째 기능입니다.

cli.py는 몇 가지 중요한 코드 블록으로 마무리됩니다.

if __name__ == "__main__":
    main() 
로그인 후 복사

이 코드 블록은 파일이 명령줄에서 호출되는 경우에만 파일을 실행하도록 인터프리터(Python)에 지시합니다.

조연

이 프로젝트에는 if/elif/else 문과 함께 while 루프를 사용하는 도우미 함수도 있었습니다. 특히 현재 배우 목록을 선택할 때 탐색의 용이성을 보여주는 점이 눈에 띕니다.

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 문에 익숙해졌을 뿐만 아니라 for 루프와 함께 enumerate()를 사용하여 프로젝트 전체의 모든 목록을 허용하는 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
        ]
로그인 후 복사

여기서는 영화() 메서드가 배우의 ID를 사용하여 영화 테이블을 쿼리하여 현재 Actor 인스턴스와 연결된 모든 영화를 검색합니다. 그러면 Movie 객체 목록이 반환되어 Actor와 Movie 사이에 "has-many" 관계가 설정됩니다.

논의된 코드 블록은 제가 더 많은 이해를 얻는 데 중점을 둔 프로젝트의 주요 영역이었습니다. 전반적으로 이 프로젝트는 Python 실력을 향상시키는 좋은 연습이 되었습니다.

위 내용은 나의 첫 CLI.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿