당신은 멋쟁이, 우리는 장고쟁이~

0%

PEP8 Naming Conventions - 2편

파이썬 Naming Convention - 2편



Prescriptive: Naming Conventions


타이틀이 prescriptive: Naming Conventions 인데. Prescriptive 의 뜻은 규범 혹은 처방등의 의미로 쓰입니다.

이름짓기에 관한 처방 혹은 규범이라는 뜻이 되겠네요.

Names to Avoid (피해야할 이름들)


절대로 피해야 할 변수명은, 아래와 같습니다.


  • 소문자 엘l
  • 대문자 오 O
  • 대문자 아이 I

l (엘), O(오), I(아이)

이 문자들은, 숫자 1과 0 하고 구분이 잘 안가기 때문에 사용하는것을 피해야 합니다.


ASCII 호환


파이썬 스탠다드 라이브러리에서 사용되는 식별자들은 ASCII 호환이 되어야 합니다.

이 부분은, PEP3131에 나와있습니다.



Package and Module Names(패키지와 모듈 이름)


모듈명은 짧아야 하고, 모든 문자가 소문자여야 합니다.


가독성이 향상될수 있을 경우, 모듈 이름에 언더스코어를 붙여도 됩니다.


파이썬 패키지 이름도 짧아야 하는건 마찬가지이고, 모든 문자가 소문자여야 하지만

패키지에는 언더스코어의 사용은 권장되지 않습니다.



C나 C++ 로 쓰여져 있는 확장 모듈이 파이썬 모듈과 같이 동작하여 고급의 인터페이스를 제공할때에는,

C / C++ 모듈 맨앞에 언더스코어를 붙입니다 (예, _socket)


Class Names(클래스명)



클래스의 이름을 지을때는 보통 CapWords 원칙을 따릅니다



1
2
3
4
5
6
7
8
9
10
# CapWords 의 예시 
# class 이름에서 각 용어의 첫문자만 대문자로 표시

class StudentPackage():
pass

class EmployeeBenefits():
def salary_remuneration():
pass
pass


인터페이스가 문서화되어 있고 클래스가 호출용도로만 사용될 경우에는, 함수명을 짓는 방법과 동일하게 사용되어도 괜찮습니다.


빌트인 (예, 내장함수, 내장클래스, 내장모듈) 이름들을 짓는데에는 별도의 규칙이 존재합니다.

대부분의 빌트인 이름들은, 하나의 단어로 되어 있습니다.
한가지 이상의 단어가 사용되는 예외가 생길때에는, 기본적으로 CapWords 규칙을 따릅니다.


Type Variable Names (타입 변수 이름)



type variables (타입변수)의 이름은 PEP484에 소개되어 있습니다.


보통 CapWords 규칙을 사용하고, 짧은이름으로 짓는게 권장됩니다


covariant(공변) 과 contravariant(반변) 동작을 선언할때에는, 변수에 접미사를 붙이는게 권장됩니다.

1
2
3
4
from typing import TypeVar 

VT_co = TypeVar('VT_co', covariant=True)
KT_contra = TypeVar('KT_contra', contravariant=True)



Exception Names (예외 이름)



예외처리 상황에서, 예외사항은 하나의 클래스 형태가 됩니다.


따라서, 클래스명을 짓는 원칙이 여기에 적용됩니다. 예외명뒤에 Error 라는 접미사를 예외명에 붙여야 합니다

Global Variable Names (전역변수명)



전역변수가 하나의 모듈 안에서만 사용된다고 가정할때, 전역 변수명을 짓는 방법은 함수명을 짓는것과 동일합니다

import 함수를 사용하여 가져가야 하는 모듈들은 __all__ 을 사용해서, 전역변수를 가져가는것을 막을수 있습니다. 혹은, 언더스코어를 접두사에 붙여서 전역변수가 공유값이 아니라는것을 표시할수 있습니다.


Function and Variable Names



함수명은 소문자로 되어 있어야 하고, 함수명에 쓰이는 단어들은 가독성의 향상을 위해 언더스코어로 분리되어 있어야 합니다.


변수명을 지을때도 함수명을 짓는것과 동일한 방식으로 짓습니다

함수이름은,

소문자로만 이루어져 있고, 가독성을 위해 각 단어들을 언더스코어로 분리합니다


1
2
3
4
5
6
7
def love_python():
pass

# 변수명
# 소문자로만 이루어져 있고, 각 단어들을 _로 구분해 줍니다

top_student_number = 1548

함수명이나 변수명을 지을때 위 방식과 다르게 mixedCase 가 사용될수도 있습니다만,


mixedCase사용은 해당 스타일이 이미 적용된 코드에서만 사용합니다 (예, threading.py)



Method Names and Instance Variables



메써드 이름과 인스턴스 변수들도 함수명을 짓는 방식과 동일합니다.

소문자로 짓고, 각 단어들은 _로 분리해 줍니다.


퍼블릭 값이 아닌 메써드와 인스턴스 변수들은 맨앞에 언더스코어 하나를 붙여줍니다


서브클래스들과 이름들이 충돌하는것을 피하기 위해서는,


파이썬의 name mangling 룰에 따라서, 맨앞에 두개의 언더스코어를 붙여줍니다.



Constants (상수)



constants (상수) 이름은,

모든 문자가 대문자로 되어 있고, 각 단어들은 언더스코어를 사용해 분리합니다.


1
2
3
4
# Constants 

MAX_OVERFLOW = 10
TOTAL = 500


마치며..



Naming Convention 의 내용이 좀 깁니다.


변수명, 함수명, 클래스명 들의 이름을 잘 짓는건 굉장히 중요합니다.

내가 정의한 이름들이 다른 사람들이 봤을때

읽기 편하고 의도를 파악하기 쉽게 지어야 합니다.