PEP8 (Python Enhancement Proposal)

About_work·2022년 12월 28일
0

python clean code

목록 보기
1/11
  • naming rule

    • 모듈 이름에는 소문자를 써라.

    • _ABC

      • 보호 (protect) 필드
      • 약한 비공개(weak private)
      • 보호되야 하는 instance attribute
      • 클래스, 함수 등의 이름으로도 쓰일 수 있다.
        • from module import * 을 하면, _로 시작하는 모든 객체들은 무시된다.
    • __ABC

      • 비공개(private) 필드
      • 한 클래스 안에서만 쓰이고 다른 곳에서는 쓰면 안되는 경우 (안에서만 호출이 되는 용도)
      • 외부에서 instance.__ABC 를 호출하면 에러가 난다.
      • 변수 뿐만 아니라, method 이름에도 적용이 가능하다.
      • 더블 언더스코어가 붙은 class의 attribute 이름은 맹글링되어 class 간 속성명끼리의 충돌을 방지한다.
      • 특정 class가 부모 class의 변수를 override 하는 것을 방지한다.
        • 맹글링이란, 컴파일러 또는 인터프리터가 변수나 함수명을 그대로 사용하지 않고, 일정한 규칙에 의해 변형시키는 것을 말한다.
        • 파이썬에서 맹글링 규칙은 더블 언더스코어가 쓰인 속성명 앞에 '_클래스명'을 결합하는 것이다.
          • A 클래스 내 __Val -> _A_val
    • ABC_

      • 파이썬 키워드와의 충돌을 피하기 위해서 사용하는 컨벤션이다.
      • ex: class_
    • __ABC__

    • 모듈 수준의 상수는 모든 글자를 대문자로 하고, 단어와 단어 사이를 밑줄로 연결한 형태를 사용한다.

    • 클래스 method 는 클래스를 가리키는 첫 번째 인자의 이름으로 반드시 cls를 사용해야 한다.

  • 식과 문

    • 긍정적인 식을 부정하지 말고, 부정을 내부에 넣어라.

      • if not a is b (x)
      • if a is not b (o)
    • 빈 container 나 seqeunce([], '' 등)을 검사할 때는 길이를 0과 비교하지 말라. 이들이 False로 취급된다는 사실을 이용해, 조건문을 써라.

      • if len(something) == 0 (x)
      • if not container, (o)
    • 마찬가지로 비어 있지 않은 container나 sequence([1] 이나 'hi' 등)을 검사할 때도, 길이가 0보다 큰지 비고하지 말고, True로 취급된다는 사실을 활용하라.

    • 한 줄짜리 if문이나, 한 줄짜리 for, while 루프, 한 줄짜리 except 복합문을 사용하지 말라.

    • 여러 줄에 걸쳐 식을 쓸 때는, 줄이 계속된다는 표시를 하는 \ 문자보다는, 괄호를 사용하라!!!

  • import

    • import 문을 항상 파일 맨 앞에 위치시켜라.
    • 모듈을 임포트할 때는 absolute name을 사용하고, 현 모듈의 경로에 상대적인 이름은 사용하지 말라.
      • bar 패키지로 부터, foo 모듈을 임포트 한다면,
        • from bar import foo (o)
        • import foo (x)
  • 반드시 상대적인 경로로 임포트해야 하는 경우에는 from . import foo 처럼 명시적인 구문을 사용하라.

  • 임포트를 적을 떄는 표준 라이브러리 모듈, 서드 파티 모듈, 여러분이 만든 모듈 순서로 섹션을 나눠라. 각 섹션에서는 알파벳 순서로 모듈을 임포트하라.

  • Pylint 도구

    • (https://pylint.org)는 파이썬 소스 코드를 분석하는 유명한 정적분석기(static analyzer)이다.
    • PEP 8 스타일 가이드를 자동으로 실행해주고, 파이썬 프로그램에서 저지르기 쉬운 다양한 유형의 오류를 감지해준다.
    • 여러 IDE와 에디터도 자체 lint 도구나, 비슷한 기능을 제공하는 plugin을 지원한다.
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글