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

0%

PEP8 Naming Conventions - 1편

파이썬 Naming Convention



파이썬에서의 이름짓기 규칙은 조금 지저분합니다. 따라서, 우리는 이름짓기를 완벽하게 일반화하여 일관성있게 할수가 없습니다.



그렇지만, PEP8 에서는 현재 권장되는 이름짓기 규칙과 naming standard 를 제시합니다



새로운 모듈과 패키지들은

PEP8에 나와있는 naming convention 대로 이름이 지어져야 합니다.

하지만

존재하고 있는 라이브러리들은 이미 다른 스타일들을 가지고 있기 때문에,

내부적으로 일관성을 정하여 이름을 사용합니다.



Overriding Principle


퍼블릭 API 에서 사용자에게 보이는 이름들은 실행과 이행에 따라 지어진 이름보다. 사용처에 따라서 이름을 지어줍니다.


Descriptive: Naming Styles



우리가 코드로 이름을 써줄때, 굉장히 많은 스타일들이 존재합니다.

함수, 변수, 클래스, 매써드들의 이름을 적을때 쓰이는 스타일들은 여러가지가 존재합니다


아래 테이블로 정리 해봤습니다



Naming Style 비고
b (single lowercase letter) 소문자 1글자
B (single Uppercase letter) 대문자 1글자
lowercase 소문자로만 이루어진 이름
lower_case_with_underscore 소문자와 언더스코어가 조합된 이름
UPPERCASE 대문자로만 이루어진 이름
UPPER_CASE_WITH_UNDERSCORES 대문자와 언더스코어로 조합된 이름
CapitalizedWords 단어의 첫글자들을 대문자로 표시하는 이름 (Carmel Case)
mixedCase 첫번째단어는 소문자로, 뒤에 오는 단어들은 대문자로 표시
Captialized_Words_With_Underscores 단어의 첫글자들만 대문자로 표시하고 언더스코어로 이어지는 이름 (못생김!)


추가로, 파이썬에는 많이 존재 하진 않지만 짧고 고유한 prefix 를 소속 그룹과 관련하여 이름에 붙이는 방식도 있습니다.


1
2
3
4
5
os.start()
# os.start() 함수는 튜플을 반환하는데
# 튜플에 들어있는 이름들이 prefix (접두사) 를 포함하고 있습니다.

# 예) st_mode, st_size, st_mtime


X11 라이브러리는 모든 퍼블릭 함수 앞에 X를 붙입니다. 파이썬에서는 보통 이런 스타일을 불필요하게 생각합니다.
왜냐하면, 모든 속성과 메써드들의 이름들은 객체와 함께 접두사가 붙고,
함수 이름은 모듈 이름으로 접두사가 붙기 때문입니다.



언더스코어를 사용하는 특수한 형태



Speical form 사용목적 예시
_single_leading_underscore 내부적으로 사용 import *을 실행시, _로 시작하는 객체는 가져오지 않습니다.
single_trailing_underscore_ 파이썬 키워드와 겹치지 않기 위해 사용 Tkinter.Toplevel(master,class_<br />='ClassName')
__double_leading_underscore 클래스 속성과 네임 멩글링 아래 class Car 예시 참조
__double_leading_and_trailing__ 매직 메서드 혹은 속성 __init__, __import__ , __file__

자세한 설명은 아래 코드를 참조


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# _ 하나가 맨앞에 붙는 경우 
# 내부적으로 사용할때 사용
_single_leading

# import * 를 하면, _로 시작하는 객체는 가져오지 않음.

# _ 하나가 맨뒤에 붙는 경우
# 파이썬 키워드와 겹치는것을 피하기 위해 사용
single_trailing_underscore_

Tkinter.Toplevel(master, class_='ClassName')

# __ 두개가 맨앞에 붙는 경우
# 클래스 속성과 name mangling

__double_leading_underscore

class Car:
def __init__(self):
self.__canDrive = True
def __len__(self):
return 5
car = Car()


# __ 두개가 앞뒤로 붙는경우
# 메직메써드로 사용자가 제어하는 이름공간안에 사용
__double_leading_and_trailing_underscore__

__init__
__import__
__file__


마치며..



아직까지는 이름 지을일이 많이 없고, 특수 케이스가 별로 없어서.


우선 이런게 있다는것을 잘 알고 넘어가면 되겠습니다.