우와한 개발자

[Python] 언더스코어(_) 정리 - 단일, private, name mangling, dunder

by 우와한개발자

[ 파이썬 _ (언더스코어) 변수 ]

형태 이름 특징
_ 단일 언더스코어 무시/임시 변수, 마지막 결과값
_변수명 싱글 언더스코어 관례적 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)

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기