inspect — 라이브 객체 검사

inspect — 라이브 객체 검사

inspect 모듈은 모듈, 클래스, 메서드, 함수, traceback, 프레임 객체, 코드 객체 같은 라이브 객체에 대한 정보를 얻는 데 도움이 되는 여러 유용한 함수를 제공해요. 예를 들어 클래스의 내용을 검사하고, 메서드의 소스 코드를 검색하며, 함수의 인자 리스트를 추출·형식화하고, 상세한 traceback을 표시하는 데 필요한 모든 정보를 얻을 수 있어요.

이 모듈이 제공하는 네 가지 주요 서비스: 타입 검사, 소스 코드 가져오기, 클래스와 함수 검사, 인터프리터 스택 검사예요.

출처: Python documentation

본문

타입과 멤버

inspect.getmembers(object[, predicate]) — 객체의 모든 멤버를 이름으로 정렬된 (name, value) 쌍 리스트로 반환해요. 선택적 predicate 인자가 제공되면(각 멤버의 value 객체와 함께 호출됨) predicate이 참 값을 반환하는 멤버만 포함돼요.

inspect.getmembers_static(object[, predicate]) — 디스크립터 프로토콜, __getattr__ 또는 __getattribute__를 통한 동적 조회를 트리거하지 않고 객체의 모든 멤버를 반환해요. 버전 3.11에서 추가됨.

inspect.getmodulename(path) — 파일 경로로 명명된 모듈의 이름을 반환해요(포함하는 패키지 이름 제외). 파일 확장자와 일치하면 확장자가 제거된 최종 경로 구성 요소가 반환되고, 그렇지 않으면 None이 반환돼요.

inspect.ismodule(object) — 객체가 모듈이면 True. inspect.isclass(object) — 객체가 클래스이면 True. inspect.ismethod(object) — 객체가 파이썬으로 작성된 바운드 메서드이면 True. inspect.isfunction(object) — 객체가 파이썬 함수이면 True. inspect.ispackage(object) — 객체가 패키지이면 True(버전 3.14). inspect.isgeneratorfunction(object) — 객체가 제너레이터 함수이면 True. inspect.isgenerator(object) — 객체가 제너레이터이면 True. inspect.iscoroutinefunction(object) — 객체가 코루틴 함수이면 True. inspect.iscoroutine(object) — 객체가 코루틴이면 True. inspect.isawaitable(object)await 표현식에서 사용할 수 있으면 True. inspect.isasyncgenfunction(object) — 비동기 제너레이터 함수이면 True. inspect.isasyncgen(object) — 비동기 제너레이터 이터레이터이면 True. inspect.istraceback(object), inspect.isframe(object), inspect.iscode(object), inspect.isbuiltin(object), inspect.isroutine(object), inspect.isabstract(object) 등이 제공돼요.

소스 코드 가져오기

inspect.getdoc(object) — 객체의 문서 문자열을 cleandoc()으로 정리해 가져와요. inspect.getcomments(object) — 객체의 소스 코드 바로 앞의 주석 줄을 단일 문자열로 반환해요. inspect.getfile(object) — 객체가 정의된 (텍스트 또는 바이너리) 파일의 이름 반환. inspect.getmodule(object) — 객체가 정의된 모듈을 추측해요. inspect.getsourcefile(object) — 객체가 정의된 파이썬 소스 파일의 이름 반환. inspect.getsourcelines(object) — 객체의 소스 줄 리스트와 시작 줄 번호 반환. inspect.getsource(object) — 객체의 소스 코드 텍스트를 단일 문자열로 반환. inspect.cleandoc(doc) — 코드 블록과 정렬되도록 들여쓰기된 docstring의 들여쓰기를 정리해요.

Signature 객체로 callable 검사

inspect.signature(callable, *, follow_wrapped=True, globals=None, locals=None, eval_str=False, annotation_format=Format.VALUE) — 주어진 callable에 대한 Signature 객체를 반환해요.

>>> from inspect import signature
>>> def foo(a, *, b:int, **kwargs):
...     pass
>>> sig = signature(foo)
>>> str(sig)
'(a, *, b: int, **kwargs)'

class inspect.Signature(parameters=None, *, return_annotation=Signature.empty) — 함수의 호출 시그니처와 반환 어노테이션을 나타내는 Signature 객체. empty(반환 어노테이션 부재 표시), parameters(정렬된 매핑), return_annotation, bind(*args, **kwargs), bind_partial(*args, **kwargs), replace(...), format(...) 메서드와 from_callable(obj, ...) 클래스 메서드를 제공해요.

class inspect.Parameter(name, kind, *, default=Parameter.empty, annotation=Parameter.empty) — 함수가 수용하는 각 파라미터에 대한 Parameter 객체. empty, name, default, annotation, kind(POSITIONAL_ONLY, POSITIONAL_OR_KEYWORD, VAR_POSITIONAL, KEYWORD_ONLY, VAR_KEYWORD) 속성을 제공해요.

class inspect.BoundArgumentsSignature.bind() 또는 Signature.bind_partial() 호출의 결과. arguments, args, kwargs, signature 속성과 apply_defaults() 메서드를 제공해요.

클래스와 함수

inspect.getclasstree(classes, unique=False) — 주어진 클래스 리스트를 중첩 리스트의 계층으로 배열해요. inspect.getfullargspec(func) — 파이썬 함수 파라미터의 이름과 기본값을 가져와요. inspect.getargvalues(frame) — 특정 프레임에 전달된 인자에 대한 정보 가져오기. inspect.getmro(cls) — 메서드 해석 순서로 클래스 cls의 기본 클래스 튜플 반환. inspect.getcallargs(func, /, *args, **kwds) — 인자를 함수·메서드의 인자 이름에 바인딩. inspect.getclosurevars(func) — 함수·메서드의 외부 이름 참조 매핑. inspect.unwrap(func, *, stop=None)func가 감싼 객체를 가져옴. inspect.get_annotations(obj, ...) — 객체의 어노테이션 dict 계산.

인터프리터 스택

class inspect.FrameInfo — 프레임 객체에 대한 정보. frame, filename, lineno, function, code_context, index, positions 속성을 제공해요. class inspect.Traceback — traceback 프레임에 대한 정보.

inspect.getframeinfo(frame, context=1) — 프레임 또는 traceback 객체에 대한 정보 가져오기. inspect.getouterframes(frame, context=1) — 프레임과 모든 외부 프레임의 FrameInfo 객체 리스트. inspect.getinnerframes(traceback, context=1) — traceback의 프레임과 모든 내부 프레임. inspect.currentframe() — 호출자의 스택 프레임 객체 반환. inspect.stack(context=1) — 호출자의 스택의 FrameInfo 객체 리스트. inspect.trace(context=1) — 현재 프레임과 처리 중인 예외가 발생한 프레임 사이의 스택 리스트.

프레임 객체에 대한 참조를 유지하면 프로그램이 참조 순환을 만들 수 있으므로, 프레임을 보관해야 한다면 frame.clear() 메서드를 사용해 참조 순환을 끊는 것을 권장해요.

제너레이터, 코루틴, 비동기 제너레이터의 현재 상태

inspect.getgeneratorstate(generator) — 제너레이터-이터레이터의 현재 상태를 가져와요. 상태: GEN_CREATED, GEN_RUNNING, GEN_SUSPENDED, GEN_CLOSED. inspect.getcoroutinestate(coroutine) — 코루틴 객체의 현재 상태(CORO_CREATED, CORO_RUNNING, CORO_SUSPENDED, CORO_CLOSED). inspect.getasyncgenstate(agen) — 비동기 제너레이터 객체의 현재 상태.

inspect.getgeneratorlocals(generator) — 제너레이터의 라이브 로컬 변수 매핑. inspect.getcoroutinelocals(coroutine), inspect.getasyncgenlocals(agen) — 유사한 함수.

코드 객체 비트 플래그

inspect.CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS, CO_NESTED, CO_GENERATOR, CO_COROUTINE, CO_ITERABLE_COROUTINE, CO_ASYNC_GENERATOR, CO_HAS_DOCSTRING, CO_METHOD. 이 플래그는 CPython 특정이며 다른 파이썬 구현에서는 정의되지 않을 수 있어요.

명령줄 인터페이스

inspect 모듈은 명령줄에서 기본적인 내성(introspection) 기능도 제공해요. 기본적으로 모듈 이름을 받아 그 모듈의 소스를 출력해요. --details 플래그는 소스 대신 지정된 객체에 대한 정보를 출력해요.

더 알아보기 (Learn more)