PEP8 Code Layout - Imports (가져오기)
PEP8 코드 레이아웃, imports
편 입니다.
imports
는 해당 파일에 다른 함수나 모듈을 불러올때 사용하는 명령어 입니다.
표준 라이브러리 기능이나, 다른 모듈에 있는 함수, 클래스 혹은 메써드들을 가져올때 사용합니다.
PEP8에 따르면, Imports 는 보통 별도의 줄로 되어 있어야 합니다.
1 | # 좋은예 |
하지만, 아래의 경우도 괜찮습니다.
1 | # 좋은예 |
가져오기는 언제나 파일의 맨 위에 위치해야 하고,
모듈 주석이나 docstring 바로 뒤에 와야 합니다.
그리고 모듈 글로벌값들과 상수들 전에 와야 합니다.
가져오기는 아래 순서의 그룹으로 나뉩니다
- 스탠다드 라이브러리 imports
- 연관된 3자 모듈 / 라이브러리 imports
- 로컬 어플리케이션 / 라이브러리 imports
이 그룹들 사이에는 빈줄을 넣어줘서 가져옵니다
1 | # 파이썬 스탠다드 라이브러리 |
추천되는 import 방식은, 절대값의 imports 입니다.
절대 경로로 가져오면,
a) 코드에서 가독성이 높아집니다, b) 만약 import system 이 잘못 설정이 되어 있더라도 적어도 에러 메시지가 더 좋게 표시됩니다.
명시적인 상대경로로 import 를 하는것도 허용됩니다.
특히, 절대 경로로 import 하는것이 불필요한 복잡한 패키지 레이아웃에서는
명시적인 상대경로로 import 를 해도 됩니다.
1 | # 절대값 import |
스탠다드 라이브러리 코드는 복잡한 패키지 레이아웃을 피해야 합니다.
언제나 절대 경로의 import 를 하는것이 좋고, 명시적이지 않는 상대 import 는 절대 사용되면 안됩니다.
클래스를 포함하고 있는 모듈에서 클래스를 가져올땐, 보통 클래스명을 써줍니다
1 | from myclass import MyClass |
Whildcard 와일드카드 가져오기를 사용하는것은 피해야 합니다.
from <module> import *
1 | # Wildcard Imports 예시, * 은 모듈에 포함된 모든것을 의미 |
*
를 사용하므로써, 모듈에 포함된 모든 클래스와 함수 그리고 메써드들을 불러옵니다.
이럴경우, 어떤 이름들이 네임공간에 있는지 헷갈리게 되고, 자동화툴이나 에디터가 헷갈릴수 있습니다.
와일드카드 가져오기는 보통 내부 인터페이스를 퍼블릭 API 로 재발행 할때 사용합니다.
이 때를 제외하고는, 기본적으로 사용을 피해야 합니다.
마치며..
클래스를 포함하고 있는 클래스 모듈을 가져올때 쓰는 스펠링이 이해가 잘 가지 않습니다.
이 부분은 조금 더 시간을 들여서 더 많은 코드를 접해본다음 이해가 갈것 같습니다.
이해를 마친뒤에 업데이트 할 예정입니다.