python 표기법,underline,underscore,naming
Python에서 __init__
이나 __str__
과 같은 함수를 종종 보았는데
그냥 뭔가 중요하고 내부적으로 돌아가는 함수라 생각하기만 했을뿐
제대로 찾아본적이 없었기에 한번 정리를 하려 한다.
일단 _(단일 언더라인)
은 네이밍에 사용되는 경우가 있어서 이를 먼저 보고가자
표기법 관련
- 스네이크 표기법 (
firstword_secondword
) Python 변수명, 함수명, 메소드명에 사용 - 낙타(camel) 표기법 (
firstwordSecondword
) JAVA에서 많이 사용 - 파스칼(pascal) 표기법 (
FirstwordSecondword
) class의 선언과 같은 경우에 사용 - 헝가리안 표기법 (
chmyword
) 접두어에 변수가 지닌 속성을 표기한다 (b : 불리언 str : 문자 등…) 하지만 지금은 지양되는 방법이라 한다
언더라인(언더스코어) 사용법
첫번째
for _ in range(10):
print(_)
#뭐 이렇게 사용되는것으로 보아 _도 i와 같은 기능을 수행할 수 있는데
x, *_, y = (1,2,3,4) # x = 1, y =4
#이런식으로 특정 부분의 문자를 의미없이 임시로 대체하고 싶을때 사용한다
두번째
☝ name_
: 파이썬 키워드와의 충돌을 막기위해 사용된다.
☝ __name__
: 사용자가 짓는 이름과 충돌을 막기위해서 Python system이 편의를 위해 사용
대게 이런 메서드나 변수는 특별한 기능을 제공하거나 수행(예약되어있음)
☝ _name
: 사용자가 private 하게 variable을 만들때 사용
(단 import되는 경우만 private하게 막아주고 직접 호출하는 경우에는 막을수 없다 = 파이썬은 완벽한 private을 지원하지 않는다)
☝ __name
: namemangles
관련된 사항으로 이를 사용하기 위해서는 좀더 명확하게 사용해야한다
namemangles
: 프로그램에서 함수를 선언하거나 전역변수등 선언시
컴파일러의 특징에 따라 일정한 규칙을 통해 함수, 변수명이 변경된다
왜 변경되는가?
Function Overloading
을 방지하기 위한 방법으로
동일한 이름으로 다른 기능을 하는 함수를 선언하게 되면 각 함수별로 구별하여 사용할수 있게 이름을 부여해준다
사용 예시 :
class A:
def __init__(self):
self.__a = 'a'
self._b = 'b'
a = A()
a._b >>> 'b'
a.__a >>> object has no attribute Error
a._A__a >>> 'a'
이런식으로 사용할수 있다.
python naming
코딩이라는 것을 처음 배울때 naming
을 왜 해야하지?
나는 남들과 다른 특별한 사람이니까 나만의 naming을 할꺼야! 하던 때가 있었는데
얼마 못가 개발자 선배님들께서 naming을 지키시는데는 다 이유가 있다는 것을 알게 되었습니다.
아는 만큼 보이고 도움이 되는 naming 규칙에 대해 PEP 8
을 참고하여 정리하겠습니다.
- 단일 변수로 헷갈리는 알파벳을 사용하지 말자
'l'
(소문자L
),'I'
(대문자i
)는 특정 폰트에서1
과 구분이 되지 않으므로 사용하지 맙시다. 이와 같은 이유로'O'
(알파벳) 또한0
과 구분되지 않으므로 사용하지맙시다. - 모듈은 소문자로 된 짧은 이름
- 클래스 이름은
PascalCase
를 따른다. 단어의첫글자를 대문자로 한다(두 단어가 연결될때도 각 단어의 첫 글자를 대문자로 한다) - 예외 이름은 예외가 클래스이름이므로
PascalCase
를 따르는데 대신 변수의 접미사로 Error가 붙어야한다 (예외는 에러이기때문) - 전역변수, 함수이름, 변수이름은 소문자를 사용한다. 단어사이 구분은 가독성을 위해 underscore( _ )를 이용한다.
- 메소드 및 함수의 인수규칙은
인스턴스 메소드의 첫번째 인수로는 항상
self
를 사용합니다. 클래스 메소드의 첫번째 인수로는 항상cls
를 사용합니다.
ex) 클래스 메서드의 예시
def class_method(cls):
pass
위와 같이 작성해주면 Class.class_method()
로 호출할 수 있다.
함수의 인수 규칙은 키워드가 충돌하는 경우 접미사로 underscore
를 붙여주는 것으로 해결할 수 있다.
- 상수는 모듈수준에서 정의되며 단어를 구분하는 밑줄을 포함하여 모두 대문자로 작성한다.