[ 파이썬 _ (언더스코어) 변수 ]
| 형태 |
이름 |
특징 |
| _ |
단일 언더스코어 |
무시/임시 변수, 마지막 결과값 |
| _변수명 |
싱글 언더스코어 |
관례적 private (접근은 가능) |
| __변수명 |
더블 언더스코어 |
Name Mangling (실제 접근 차단) |
| __변수명__ |
던더(Dunder) |
파이썬 내장 특수 변수/메서드 |
1. 단일 언더스코어 _
| 용도 |
설명 |
예시 |
| 대화형 인터프리터 |
마지막 실행 결과값을 자동 저장 |
>>> 1+2 → _는 3 |
| 사용하지 않는 변수 |
값이 필요 없을 때 관례적으로 사용 |
for _ in range(5): |
| 언패킹 무시 |
튜플/리스트 중 필요 없는 값 버릴 때 |
a, _, c = (1, 2, 3) |
2. 앞에 하나 _변수명
- 관례적 private 표시 → "외부에서 직접 쓰지 마세요"라는 의미
- 실제로 접근은 가능하지만, 개발자 간 약속
_secret = "내부용 변수"
3. 앞에 두 개 __변수명
- Name Mangling 적용 → 클래스 외부에서 직접 접근 불가
- Name Mangling = 파이썬이 __변수명을 내부적으로 _클래스명__변수명으로 이름을 바꿔서 저장하는 것
- 클래스 내부에서만 사용하는 변수
- 실제 저장될 때 _클래스명__변수명 형태로 변환되기 때문에 사용할때
class MyClass:
def __init__(self):
self.__private = "진짜 숨김"
obj = MyClass()
print(obj.__private) # ❌ 오류 (접근 불가)
print(obj._MyClass__private) # ✅ "진짜 숨김" (실제 저장된 이름)
4. 앞뒤 두 개 __변수명__ (Dunder)
- dunder = double underscore의 약자
- 파이썬이 미리 정의한 내장 특수 변수/메서드
- 개발자가 직접 선언하지 않고, 파이썬이 자동으로 관리함
1) 모듈 관련
| 변수 |
설명 |
예시 |
| __name__ |
직접 실행이면 "__main__", 임포트면 모듈명 |
"__main__" |
| __file__ |
현재 파일의 경로 |
"/home/user/test.py" |
| __doc__ |
함수/클래스의 docstring |
"두 수를 더합니다." |
| __package__ |
패키지 이름 |
"mypackage" |
2) 클래스 관련
| 변수 |
설명 |
예시 |
| __class__ |
객체의 클래스 |
<class 'int'> |
| __dict__ |
객체/클래스의 속성을 딕셔너리로 |
{'name': 'Kim', 'age': 20} |
| __init__ |
생성자 메서드 |
객체 생성 시 자동 호출 |
| __str__ |
print() 출력 형식 지정 |
"Kim, 20세" |
| len__ |
len() 호출 시 동작 정의 |
return len(self.data) |
# __name__
if __name__ == "__main__":
print("직접 실행됨")
# __doc__
def add(a, b):
"""두 수를 더합니다."""
return a + b
print(add.__doc__) # 두 수를 더합니다.
# __dict__
class Person:
def __init__(self):
self.name = "Kim"
self.age = 20
p = Person()
print(p.__dict__) # {'name': 'Kim', 'age': 20}
# __str__
class Person:
def __str__(self):
return f"{self.name}, {self.age}세"
print(p) # Kim, 20세
# __len__
class MyList:
def __init__(self, data):
self.data = data
def __len__(self):
return len(self.data)