(나도코딩의 파이썬 입문) 11장. 모듈과 패키지(p.363~368)

2023. 3. 15. 01:43독서

반응형

안녕하세요!
<코딩 자율학습 나도코딩의 파이썬 입문> 멘토를 담당하게 된 이안입니다.

오늘은 11장 '모듈과 패키지'에 대해 이어서 학습할게요.


오늘 공부할 내용은 다음과 같습니다.

🧐 공부할 내용(p.363~368)

  • 모듈 공개 설정하기: __all__
  • 모듈 직접 실행하기

 

1.  모듈 공개 설정하기: __all__

 

제가 포스팅한 이전 글을 보시면 __init__.py 파일을 활용해서 객체를 미리 생성한 뒤

다른 파일에서 가져다 쓰는 방법을 소개해드렸어요.

 

p.363에 소개하는 것 역시 비슷한 맥락입니다.

 

vietnam이라는 모듈을 변수로 사용하는 것이죠.

 

from travel import *

trip_to = vietnam.VietnamPackage()
trip_to.detail()

 

이 코드가 에러가 나는 이유는 vietnam이 정의되지 않아서 그렇습니다.

 

우리는 vietnam이라는 모듈을 변수 그 자체로 사용하고 싶습니다.

인스턴스가 아니라 모듈 그 자체를요.

 

 

이때 필요한 것이 바로 __all__ 입니다.

 

__all__ = ["vietnam", "thailand"]

 

이렇게 코드를 작성하기만 하면 vietnam이라는 모듈을 변수로 사용할 수 있습니다.

그렇기 때문에 

 

trip_to = vietnam.VietnamPackage()
trip_to.detail()

 

이 코드가 가능한 것이죠.

 

첫 번째 코드는 vietnam이라는 모듈의 클래스의 인스턴스를 trip_to에 할당합니다.

두 번째 코드는 인스턴스의 detail()이라는 메서드를 사용하는 것입니다.

 

 

모두 모듈을 변수로 가져와서 사용할 수 있기 때문에 가능한 일이죠.

 

 

당연한 얘기겠지만, 변수명과 모듈명은 같아야 합니다.

 

 

vietnam.py이라는 파일을 모듈로 사용하기 위해서 이렇게 하면 안 됩니다.

 

__all__ = ["vietnam_module"] # 동작하지 않음

 

 

 

2.  모듈 직접 실행하기

모듈 직접 실행은 테스트에서 많이 사용되곤 합니다.

모듈 하나만을 따로 실행해서 테스트하는 것이 더 쉽기 때문이죠.

 

한번 예제 코드를 같이 볼까요?

 

class ThailandPackage:
    def detail(self):
        print("[태국 3박 5일 패키지] 방콕, 파타야 여행(야시장 투어) 50만원")

if __name__ == "__main__":
    print("thailand 모듈을 직접 실행")
    print("이 문장은 모듈을 직접 실행할 때만 실행돼요.")
    trip_to = ThailandPackage()
    trip_to.detail()
else:
    print("thailand 외부에서 모듈 호출")

 

이 코드를 외부에서 호출하지 않고 다음 명령어를 사용해 보세요.

 

터미널을 열고 아래 명령을 입력하세요.

 

python3 ch11.py

 

그럼 직접 실행 문장이 출력될 것입니다.

 

반면 import 해서 출력하는 것은 실행결과가 달라집니다.

 

아래에 __name__의 역할에 대한 문서를 첨부할게요 :)


이번 시간에는 모듈에 대해서 알아봤어요

 

공부하시다 궁금하신 점이 있다면 댓글 남겨주세요~

 

 

✅ 정리

* 모듈 공개 설정하기

* 모듈 직접 실행하기

 

반응형