[1-2] PEP 8 스타일 가이드

원형석·2024년 9월 1일

PEP 8 스타일 가이드를 따르자

파이썬을 파이썬스럽게 사용하려면 PEP 8을 알아야 한다. 파이썬 개선 제안서 (Python Enhancement Proposal) #8, 다른 말로 PEP 8은 파이썬 코드를 어떻게 구성할지 알려주는 스타일 가이드다. 화이트스페이스, 네이밍, 표현식과 문장에 관한 규칙의 주요 내용은 다음과 같다.

화이트스페이스(whitespace)

1️⃣ 탭이 아닌 스페이스로 들여쓴다.
2️⃣ 문법적으로 의미 있는 들여쓰기는 각 수준마다 스페이스 네 개를 사용한다.
3️⃣ 표현식이 길어서 다음 줄로 이어지면 일반적인 들여쓰기 수준에 추가로 스페이스 네 개를 사용한다.
4️⃣ 파일에서 함수와 클래스는 빈 줄 두 개로 구분해야 한다.
5️⃣ 클래스에서 메서드는 빈 줄 하나로 구분해야 한다.
6️⃣ 리스트 인덱스, 함수 호출, 키워드 인수 할당에는 스페이스를 사용하지 않는다.
7️⃣ 변수 할당 앞뒤에 스페이스를 하나만 사용한다.

위 규칙을 적용한 샘플 코드는 다음과 같다.

class Calculator:
    def __init__(self, value=0):  # 1️⃣ 들여쓰기는 스페이스 4개, 6️⃣ 키워드 인수 할당에는 스페이스X
        self.value = value  # 7️⃣ 변수 할당 앞뒤에 스페이스 하나 사용
	
    def add(self, x):  # 5️⃣ 클래스에서 메서드는 빈 줄 하나로 구분
        self.value += x
        return self.value


def calculate_expression(a, b, operation):  # 4️⃣ 파일에서 함수와 클래스는 빈 줄 두 개로 구분
    if operation == 'add': 
        return a + b
    elif operation == 'complex_operation':
        return (a + b +  # 3️⃣ 표현식이 길어지면 다음 줄로 넘어가고 추가 들여쓰기
                a * b -
                b / a)
    else:
        return 'Error: Unsupported operation'  # 7️⃣ 연산자 앞뒤에 스페이스 하나 사용


if __name__ == '__main__':  # 2️⃣ 조건문, 반복문, 함수 호출 등에서 스페이스를 적절히 사용
    calc = Calculator()  # 6️⃣ 함수 호출 시 인수와 함수명 사이에 스페이스 사용하지 않음
    result = calc.add(10)  # 6️⃣ 함수 호출 시 인수와 함수명 사이에 스페이스 사용하지 않음
    expression_result = calculate_expression(10, 5, 'complex_operation')  # 6️⃣ 함수 호출 시 인수와 함수명 사이에 스페이스 사용하지 않음

    print(f"Calculator 결과: {result}")
    print(f"수식 계산 결과: {expression_result}")

네이밍(naming)

1️⃣ 모듈은 짧고 모두 소문자 이름을 가져야 한다. 가독성을 개선하는 경우 모듈 이름에 밑줄을 사용할 수 있다.
2️⃣ 모듈 수준 상수는 ALL_CAPS 형식을 따른다.
3️⃣ 클래스와 예외는 CapitalizedWord 형식을 따른다. 예외는 접미사 Error로 끝나야 한다.
4️⃣ 클래스의 Public 메서드, 함수, 변수, 속성은 lowercase_underscore 형식을 따른다.
5️⃣ 클래스의 Non-public 메서드와 인스턴스 변수에는 _leading_underscore 형식을 따른다.
6️⃣ 클래스의 인스턴스 메서드에서 첫 번째 파라미터의 이름은 self로 지정한다.
7️⃣ 클래스 메서드에서는 첫 번째 파라미터의 이름을 cls로 지정한다.
8️⃣ 서브 클래스에서의 변수명 충돌을 막으려면 __double_leading_score 형식을 따르는 인스턴스 변수명을 사용한다.

# 1️⃣ 파일명은 simple_module.py이라 가정한다.
ALL_CAPS_CONSTANT = 100  # 2️⃣ 모듈 수준 상수


class SampleClass:  # 3️⃣ 클래스 이름은 CamelCase
    def __init__(self, value):  # 6️⃣ 인스턴스 메서드, 첫 번째 파라미터는 self
        self.public_var = value  # 4️⃣ Public 변수
        self._private_var = value  # 5️⃣ Non-public 변수
        self.__mangled_var = value  # 8️⃣ 이름 충돌 방지 변수

    def _private_method(self):  # 5️⃣ Non-public 메서드
        if self._private_var < 0:  # 음수 값에 대한 예외 처리
            raise CustomError("Value cannot be negative!")
        return self._private_var * ALL_CAPS_CONSTANT
        
    def public_method(self):  # 4️⃣ Public 메서드
        return self._private_method()

    @classmethod
    def class_method(cls, value):  # 7️⃣ 클래스 메서드, 첫 번째 파라미터는 cls
        return cls(value * ALL_CAPS_CONSTANT)


class CustomError(Exception):  # 3️⃣ 예외 클래스
    pass


if __name__ == '__main__':
    instance = SampleClass(10)
    try:
        print(instance.public_method())
        print(SampleClass.class_method(5))  # 클래스 메서드 호출
    except CustomError as e:
        print(e)

표현식과 문장

자동 포맷팅 도구 black과 VSCode 설정 방법

파이썬 코드를 작성할 때 자동으로 PEP 8 스타일을 준수하도록 코드 포맷터를 설정할 수 있다. 대표적인 코드 포맷터는 black이다.

profile
Python을 좋아합니다.

0개의 댓글