Remarks
- Coding 전 충분한 시간을 들여 전체 구조 설계하기
- 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 functionsconfig.py
: define common config constants
1.2 class1: Package for Class1 (snake case)
env
: environment package forClass1
Class1.py
: Class module
1.3 main.py: start point of procedure
2. Coding convention
2.1 Variable
2.1.1 Name
- Common
- 큰 단위가 먼저 오고, 각 단위는
_
로 구분 - protected 및 private는
_
를 prefix로 사용
(__
사용 X) - Shadowing 금지
- 큰 단위가 먼저 오고, 각 단위는
- Sequence
- 원소 단위에
s
를 suffix로 사용
(-ies
사용 X,-ses
사용 O)
- 원소 단위에
1
2
dates_parts = [['2020-01', '2020-02'],
['2021-01', '2021-02']]
- Scalar
num_
을 prefix로 사용
- Flag
flag_
를 prefix로 사용
- Iteration index
idx_
를 prefix로 사용i
,j
,k
등의 무의미한 이름을 지양- 사용되지 않는 index의 경우,
_
를 사용
2.1.2 Global variable
- 기본적으로 전역변수는 constant만으로 구성
G
혹은Global
class의 멤버 변수로 관리
2.1.3 Constant
- 이름은 전부 대문자 사용
2.2 Function
- 기본적으로 이름은 전부 소문자와
_
사용 (snake case)
2.2.1 Getter
- 값을 반환하는 경우,
get_
을 prefix로 사용 - 결과값 이외의 관련 값를을 반환하는 경우,
data
sequence에 담아 반환
2.2.2 Setter
- 입력값으로 특정값을 갱신하는 경우,
set_
을 prefix로 사용 - call by value, reference 등의 방법을 통해 입력값을 갱신하는 방식으로 결과값을 계산하는 경우,
compute_
를 prefix로 사용
2.3 Class
- Module명은 camel case를 사용
- Package명은 snake case를 사용
Class1.py
는Class1
과 subclass만 포함- Abstract method는 다음과 같이 구현
1
2
3
4
5
from abc import ABCMeta, abstractmethod
class SuperPackage(metaclass=ABCMeta):
@abstractmethod
def run(self, inputs):
raise NotImplementedError
PREVIOUSEtc