파이썬(Python)에서 정의하는 모든 클래스는 별도로 선언하지 않아도 자동으로 생성되는 내장(built-in) 속성들을 가지고 있습니다. 이러한 속성은 일반적인 속성과 마찬가지로 점(.) 연산자를 통해 언제든 조회할 수 있으며, 클래스의 구조와 메타 정보를 동적으로 확인하는 데 매우 유용합니다.
주요 내장 속성
- __dict__ — 클래스의 네임스페이스 전체가 담겨 있는 딕셔너리입니다.
- __doc__ — 클래스의 문서화 문자열(docstring)입니다. 정의되어 있지 않으면 None을 반환합니다.
- __name__ — 클래스의 이름입니다.
- __module__ — 해당 클래스가 정의된 모듈의 이름입니다. 인터랙티브 모드에서 실행하면 "__main__"이 됩니다.
- __bases__ — 상속받은 기반 클래스(부모 클래스)들이 기반 클래스 목록에 나열된 순서대로 저장된 튜플입니다. 상속받은 클래스가 없으면 빈 튜플 ()이 됩니다.
예제 코드
다음은 Employee 클래스를 정의하고, 이 클래스가 가진 모든 내장 속성을 출력하는 예제입니다.
#!/usr/bin/python3
class Employee:
'모든 직원을 위한 공통 기반 클래스'
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print("총 직원 수: %d" % Employee.empCount)
def displayEmployee(self):
print("이름 :", self.name, ", 급여 :", self.salary)
print("Employee.__doc__:", Employee.__doc__)
print("Employee.__name__:", Employee.__name__)
print("Employee.__module__:", Employee.__module__)
print("Employee.__bases__:", Employee.__bases__)
print("Employee.__dict__:", Employee.__dict__)
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다. 함수 객체의 메모리 주소는 실행 환경마다 다르게 표시될 수 있습니다.
Employee.__doc__: 모든 직원을 위한 공통 기반 클래스
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: ()
Employee.__dict__: {'__module__': '__main__', 'empCount': 0,
'displayCount': <function Employee.displayCount at 0x7f8a1c2d4940>,
'displayEmployee': <function Employee.displayEmployee at 0x7f8a1c2d4a60>,
'__doc__': '모든 직원을 위한 공통 기반 클래스',
'__init__': <function Employee.__init__ at 0x7f8a1c2d4820>}
내장 속성의 실무 활용
이러한 내장 속성은 단순히 정보를 확인하는 용도를 넘어 실무에서 폭넓게 활용됩니다. __dict__를 사용하면 클래스나 객체가 어떤 멤버를 가지고 있는지 런타임에 동적으로 검사할 수 있어 디버깅과 리플렉션 작업에 유용합니다. __bases__를 활용하면 상속 구조를 프로그래밍 방식으로 탐색할 수 있으며, __doc__은 help() 함수 및 자동 문서화 도구와 연동되어 코드 문서를 관리하는 데 기여합니다.