다른 언어에 비해 파이썬에서 언더스코어의 의미는 특별하다.
파이썬에서 언더스코어는 어떤 의미로 쓰일까?
먼저, 인터프리터에서 사용되는 경우 마지막으로 실행결과 값을 저장하는 변수로 사용될 수 있다.
>>> 15
15
>>> _
15
>>> _ + 5
20
>>> _ * 10
200
다음으로 어떤 값을 무시하고 싶은 경우 사용할 수 있다. (I don't care)
# 언패킹 시 특정값을 무시, 여러 값을 무시
a, _, b = (1, 2, 3) # a = 1, b = 3
a, *_, b = (1, 2, 3, 4, 5, 6, 7) # a = 1, b = 7
# 인덱스를 무시할 때
for _ in range(10):
pass
또한, 특별한 의미의 네이밍을 하는 경우
- _single_leading_underscore
- single_trailing_underscore_
- __double_leading_underscores
- __double_leading_and_trailing_underscore__
_single_leading_underscore는 클래스의 변수, 메서드 앞에 붙여 사용하면 import시에 언더스코어가 붙은 변수나 함수는 가져오지 않게 되고, 클래스 내부에서만 사용할 수 있게 된다. 하지만, 파이썬은 진정한 의미의 private을 지원하지는 않기 때문에 직접 접근하여 사용하고자 할 때는 사용할 수 있다.
single_trailing_underscore_는 파이썬에서 사용하는 키워드와 충돌을 피하기 위해 사용한다.
__double_leading_underscores(Mangling)는 클래스의 속성값을 외부에서 접근하기 힘들게 할 때(private) 또는 하위 클래스가 상위 클래스의 속성, 메서드를 오버라이드 하는 것을 막을때, 이름 충돌 문제를 방지하기 위해 사용 할 수 있다.
class Parent:
def __init__(self):
self.__a = 10
class Child:
def __init__(self):
super().__init__()
self.__a = 15
ins = Child()
print(ins.__a)
# AttributeError : 'Child' objects has no attribute '__a'
이와 같이 맹글링을 적용시키면 본연의 이름으로는 접근할 수 없고, 접근 시 AttributeError가 발생하는 것을 볼 수 있다.
해당 변수에 접근하고자 한다면 'ins._Chile__a' 와 같은 방법으로 접근해야 한다. 이러한 특징으로 더블 언더스코어를 사용해 진짜 private처럼 보이게 하는 경우가 있지만, 이는 private을 위한 것이 아니며 private 용도의 사용을 권장하지 않는다.
__double_leading_and_trailing_underscore__는 스페셜 변수나 메서드에 사용되는 컨벤션이며, __init__, __len__, __name__과 같은 메서드와 변수들이 있다.
특별히 기술적인 내용은 아니지만 파이썬에서의 언더스코어는 조금 특별한 의미를 갖기 때문에 정리해봤다~
'🐍Python | Django' 카테고리의 다른 글
[Python] main 함수 (0) | 2022.04.26 |
---|---|
[Python] Class와 상속(Inheritance) (0) | 2022.04.19 |
[Python] Decorator (0) | 2022.04.18 |
[Python] String join()/split() (0) | 2022.02.07 |
[Python] strftime과 strptime (0) | 2021.08.25 |