Python에서 __init__ 이나 __str__과 같은 함수를 종종 보았는데 그냥 뭔가 중요하고 내부적으로
돌아가는 함수라 생각하기만 했을뿐 제대로 찾아본적이 없었기에 한번 정리를 하려 한다.
일단 _(단일 언더라인)은 네이밍에 사용되는 경우가 있어서 이를 먼저 보고가자
표기법 관련
스네이크 표기법 ( firstword_secondword )
Python 변수명, 함수명, 메소드명에 사용
낙타(camel) 표기법 ( firstwordSecondword )
JAVA에서 많이 사용
파스칼(pascal) 표기법 ( FirstwordSecondword )
class의 선언과 같은 경우에 사용
접두어에 변수가 지닌 속성을 표기한다 (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'
이런식으로 사용할수 있다.
참고 : https://mingrammer.com/underscore-in-python/, Stackoverflow
댓글 없음:
댓글 쓰기