Lined Notebook

[PEP 8] import 스타일 가이드

by cuore J

PYTHON PEP8 [ import ] style guide

1. import 기본

import는 별도의 줄로 되어있어야합니다.

# Correct:
import os
import sys

# Wrong:
import os, sys

# 이런식으로 쓰는 것은 괜찮음
from subprocess import Popen, PIPE

2. import 위치

import는 모듈의 주석이나 docstring 뒤에 최상단에 와야합니다.
import는 Standart library - Related third party - Local application/library 순서대로 그룹화 되야합니다.

''' Doc string '''

# Standard library imports
import datetime
import os

# Third party imports
from flask import Flask
from flask_restful import Api
from flask_sqlalchemy import SQLAlchemy

# Local application imports
from local_module import local_class
from local_package import local_function

3. import 형식

절대경로를 사용하여 import 되는 것을 권장합니다.
- 가독성이 증가합니다.
- 에러가 발생될 때에도 에러메시지가 더 좋게 표시됩니다.
- 복잡한 패키지 레이아웃에선 상대경로로 import 하는 것이 허용됩니다.
- standard library 는 복잡한 패키지 레이아웃을 피해야 하고, 언제나 절대경로를 사용해야합니다.

# absoulte import (절대경로)
import mypkg.sibling
from mypkg import sibling
from mypkg.sibling import example

# relative imports (상대경로)
from . import sibling
from .sibling import example

4. class 의 import

클래스가 포함된 모듈에서 클래스를 가져올 때, from 모듈 import 클래스명 을 일반적으로 사용합니다.
만약 클래스명이 로컬 클래스명과 충돌시, import 모듈을 사용하여 모듈.클래스명으로 직접 명시해줍니다.

from myclass import MyClass 
from foo.bar.yourclass import YourClass 

a = Myclass( )
b = YourClass( )

# 위의 예제에서 MyClass, YourClass 가 충돌 될 시, 모듈.클래스명을 사용합니다.
import myclass 
import foo.bar.yourclass 

a = myclass.MyClass( )
b = foo.bar.yourclass.YourClass( )

5. *(asterisk)를 이용한 import 금지

Wildcard import (from 모듈 import * )을 사용하는것을 피해야합니다. 이것을 사용할 시 헷갈리게 됩니다. 내부 인터페이스를 public API 로 재발행 할때 사용하지만 기본적으로 사용을 피하세요 ( 쓰지말자)

블로그의 정보

cuore J

cuore J

활동하기