파이썬의 내장(built-in) 속성인 __name__은 클래스, 타입(type), 함수, 메서드, 디스크립터(descriptor), 또는 제너레이터(generator) 인스턴스의 이름을 담고 있는 특수 변수입니다. 이 속성을 참조하면 해당 객체가 어떤 이름으로 정의되었는지 확인할 수 있습니다.
__name__의 기본 동작 원리
__name__의 값은 파이썬 인터프리터가 해당 모듈(소스 파일)을 어떻게 실행하느냐에 따라 달라집니다.
- 메인 프로그램으로 직접 실행하는 경우: 파이썬 인터프리터가 그 소스 파일을 최상위 프로그램으로 실행하면, 특수 변수 __name__은 "__main__"이라는 값으로 자동 설정됩니다.
- 다른 모듈에서 임포트하는 경우: 해당 파일이 다른 모듈에서 import되면, __name__은 임포트된 모듈의 이름으로 설정됩니다.
이러한 특성 덕분에 __name__은 스크립트가 직접 실행되었는지, 아니면 라이브러리처럼 임포트되어 사용되었는지를 구분하는 데 널리 활용됩니다.
예제 코드
다음 코드는 __name__ 속성의 사용 방법을 보여줍니다.
class Bar(object):
def foo():
""" This is an example of how a doc_string looks like.
This string gives useful information about the function being defined.
"""
pass
print(foo.__name__)
print(Bar.__name__)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
foo Bar
클래스 Bar 내부에 정의된 함수 foo의 __name__은 "foo"를, 클래스 Bar 자체의 __name__은 "Bar"를 반환하는 것을 확인할 수 있습니다.
실전 활용: if __name__ == "__main__" 패턴
__name__ 속성의 가장 대표적인 활용 사례는 스크립트의 직접 실행 여부를 판단하는 것입니다.
def main():
print("프로그램이 직접 실행되었습니다.")
if __name__ == "__main__":
main()이 패턴을 사용하면 해당 파일을 직접 실행할 때만 main() 함수가 호출되고, 다른 곳에서 모듈로 임포트할 때는 실행되지 않도록 제어할 수 있습니다. 재사용 가능한 모듈을 작성할 때 매우 유용하게 쓰이는 관용적(idiomatic) 코드 패턴입니다.