Coding convention for Python (private)

 

Remarks

  1. Coding 전 충분한 시간을 들여 전체 구조 설계하기
  2. Refactoring을 고려하며 coding

주석이 없어도 이해할 수 있는 code를 목표


1. Directory structure (source code)

Root directory
├─ env
│   ├─ env.py
│   ├─ util.py
│   └─ config.py
├─ class1
│   ├─ env
│   │   ├─ env.py
│   │   ├─ util.py
│   │   └─ config.py
│   └─ Class1.py
└─ main.py

1.1 env: common environment package

  • env.py: import common packages, set default environment settings(options)
  • util.py: define common utility functions
  • config.py: define common config constants

1.2 class1: Package for Class1 (snake case)

  • env: environment package for Class1
  • Class1.py: Class module

1.3 main.py: start point of procedure

2. Coding convention

2.1 Variable

2.1.1 Name

  • Common
    1. 큰 단위가 먼저 오고, 각 단위는 _로 구분
    2. protected 및 private는 _를 prefix로 사용
      (__ 사용 X)
    3. Shadowing 금지
  • Sequence
    1. 원소 단위에 s를 suffix로 사용
      (-ies 사용 X, -ses 사용 O)
1
2
dates_parts = [['2020-01', '2020-02'],
               ['2021-01', '2021-02']]
  • Scalar
    1. num_을 prefix로 사용
  • Flag
    1. flag_를 prefix로 사용
  • Iteration index
    1. idx_를 prefix로 사용
    2. i, j, k 등의 무의미한 이름을 지양
    3. 사용되지 않는 index의 경우, _를 사용

2.1.2 Global variable

  1. 기본적으로 전역변수는 constant만으로 구성
  2. G 혹은 Global class의 멤버 변수로 관리

2.1.3 Constant

  1. 이름은 전부 대문자 사용

2.2 Function

  1. 기본적으로 이름은 전부 소문자와 _ 사용 (snake case)

2.2.1 Getter

  1. 값을 반환하는 경우, get_을 prefix로 사용
  2. 결과값 이외의 관련 값를을 반환하는 경우, data sequence에 담아 반환

2.2.2 Setter

  1. 입력값으로 특정값을 갱신하는 경우, set_을 prefix로 사용
  2. call by value, reference 등의 방법을 통해 입력값을 갱신하는 방식으로 결과값을 계산하는 경우, compute_를 prefix로 사용

2.3 Class

  1. Module명은 camel case를 사용
  2. Package명은 snake case를 사용
  3. Class1.pyClass1과 subclass만 포함
  4. Abstract method는 다음과 같이 구현
1
2
3
4
5
from abc import ABCMeta, abstractmethod
class SuperPackage(metaclass=ABCMeta):
    @abstractmethod
    def run(self, inputs):
        raise NotImplementedError