파이썬의 내장 클래스 속성인 __module__은 해당 클래스, 함수 또는 객체가 어느 모듈에서 정의되었는지 그 이름을 문자열로 반환합니다. 만약 모듈 정보를 확인할 수 없는 경우에는 None을 반환합니다.
__module__ 속성의 특징
__module__은 클래스와 함수 객체가 기본적으로 가지고 있는 속성으로, 다음과 같은 상황에서 유용하게 사용됩니다.
- 디버깅이나 로깅 작업 시 객체의 출처(모듈)를 추적할 때
pickle직렬화 과정에서 클래스의 위치를 기록해야 할 때- 동적으로 모듈과 클래스를 조회하거나 문서를 자동 생성할 때
예제 코드
다음 예제는 __module__ 속성이 어떻게 동작하는지 보여줍니다.
class A(object): pass class B(A): pass b = B() print(b.__module__)
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
__main__
왜 __main__이 출력될까?
출력 결과가 __main__으로 표시되는 이유는, 해당 코드가 별도의 파일이 아닌 파이썬 인터프리터에서 직접 실행된 스크립트이기 때문입니다. 파이썬은 직접 실행되는 최상위 스크립트의 모듈 이름을 항상 __main__으로 지정합니다.
반면, 같은 클래스를 mymodule.py라는 별도의 모듈 파일에 정의하고 이를 임포트하여 사용하면, B.__module__은 'mymodule'이라는 값을 반환합니다.
# mymodule.py 안에 클래스 B가 정의된 경우 import mymodule print(mymodule.B.__module__) # 출력: mymodule
정리
__module__은 객체가 어디에서 왔는지를 알려주는 간단하지만 강력한 메타 정보 속성입니다. 대규모 프로젝트에서 클래스와 함수의 출처를 파악하거나, 직렬화 및 리플렉션 기능을 구현할 때 꼭 알아두면 좋은 개념입니다.