Python에서는 inspect 모듈의 getsource() 메서드를 사용하여 함수나 클래스 등 객체의 소스 코드를 손쉽게 확인할 수 있습니다.
inspect.getsource(object)
getsource() 메서드란?
inspect.getsource()는 인자로 전달된 객체에 대한 소스 코드 텍스트를 반환합니다. 인자로 사용할 수 있는 객체는 다음과 같습니다.
- 모듈(module)
- 클래스(class)
- 메서드(method)
- 함수(function)
- 트레이스백(traceback)
- 프레임(frame)
- 코드 객체(code object)
반환되는 소스 코드는 하나의 문자열(single string) 형태이며, 소스 코드를 가져올 수 없는 경우에는 IOError 예외가 발생합니다.
소스 코드를 가져올 수 없는 경우
다음과 같은 상황에서는 객체의 소스 코드를 검색할 수 없습니다.
- 함수가 문자열(string)이나 스트림(stream)으로부터 컴파일된 경우
- 컴파일된 파일(.pyc 등)에서 임포트한 경우
즉, 실제 .py 소스 파일에 존재하는 객체만 소스 코드를 조회할 수 있습니다.
사용 예제
inspect 모듈을 임포트한 후, 아래와 같이 스크립트에 정의된 클래스의 소스 코드를 출력할 수 있습니다.
# baz.py
import inspect
class Foo:
def bar(self):
print('Hello')
print(inspect.getsource(Foo))실행 결과
class Foo:
def bar(self):
print('Hello')위 실행 결과에서 볼 수 있듯이, inspect.getsource()는 해당 클래스가 정의된 소스 코드를 그대로 문자열로 반환합니다. 이를 활용하면 디버깅, 문서화, 동적 코드 분석 등 다양한 용도로 객체의 원본 코드를 프로그램 내에서 확인할 수 있습니다.