# `inspect` — 라이브 객체 검사

소스 코드: Lib/inspect.py

`inspect` 모듈은 모듈, 클래스, 메서드, 함수, 트레이스백, 프레임 객체 및 코드 객체와 같은 라이브 객체에 대한 정보를 얻는 데 도움이 되는 몇 가지 유용한 함수를 제공합니다. 예를 들어, 클래스의 내용을 검사하거나, 메서드의 소스 코드를 꺼내오거나, 함수의 인자 리스트를 추출하고 포맷하거나, 자세한 트레이스백을 표시하는 데 필요한 모든 정보를 얻는 데 도움이 될 수 있습니다.

이 모듈은 4가지 종류의 주요 서비스를 제공합니다: 형 검사, 소스 코드 가져오기, 클래스와 함수 검사, 인터프리터 스택 검사.

## 형과 멤버

`getmembers()` 함수는 클래스나 모듈과 같은 객체의 멤버를 검색합니다. 이름이 “is”로 시작하는 함수는 주로 `getmembers()`의 두 번째 인자로 쓰기에 편리하도록 제공됩니다. 또한 다음과 같은 특수 어트리뷰트를 언제 찾을 수 있는지 결정하는 데 도움이 됩니다:

형 | 어트리뷰트 | 설명
--- | --- | ---
모듈 | __doc__ | 도큐멘테이션 문자열
| __file__ | 파일명 (내장 모듈에는 없습니다)
클래스 | __doc__ | 도큐멘테이션 문자열
| __name__ | 이 클래스가 정의된 이름
| __qualname__ | 정규화된 이름
| __module__ | 이 클래스가 정의된 모듈의 이름
메서드 | __doc__ | 도큐멘테이션 문자열
| __name__ | 이 메서드가 정의된 이름
| __qualname__ | 정규화된 이름
| __func__ | 메서드의 구현을 포함하는 함수 객체
| __self__ | 이 메서드가 연결된 인스턴스, 또는 `None`
| __module__ | 이 메서드가 정의된 모듈의 이름
함수 | __doc__ | 도큐멘테이션 문자열
| __name__ | 이 함수가 정의된 이름
| __qualname__ | 정규화된 이름
| __code__ | 컴파일된 함수 바이트 코드를 포함하는 코드 객체
| __defaults__ | 위치나 키워드 매개 변수에 대한 기본값의 튜플
| __kwdefaults__ | 키워드 전용 매개 변수의 기본값 매핑
| __globals__ | 이 함수가 정의된 전역 이름 공간
| __annotations__ | 매개 변수 이름에서 어노테이션으로의 매핑; `"return"` 키는 반환 값 어노테이션을 위해 예약되어 있습니다.
| __module__ | 이 함수가 정의된 모듈의 이름
트레이스백 | tb_frame | 이 수준의 프레임 객체
| tb_lasti | 바이트 코드에서 마지막으로 시도한 명령의 인덱스
| tb_lineno | 파이썬 소스 코드의 현재 줄 번호
| tb_next | (이 수준에서 호출된) 다음 내부(inner) 트레이스백 객체
프레임 | f_back | 다음 외부(outer) 프레임 객체 (이 프레임의 호출자)
| f_builtins | 이 프레임이 보는 내장 이름 공간
| f_code | 이 프레임에서 실행되는 코드 객체
| f_globals | 이 프레임이 보는 전역 이름 공간
| f_lasti | 바이트 코드에서 마지막으로 시도한 명령의 인덱스
| f_lineno | 파이썬 소스 코드의 현재 줄 번호
| f_locals | 이 프레임이 보는 지역 이름 공간
| f_trace | 이 프레임의 추적 함수(tracing function), 또는 `None`
코드 | co_argcount | 인자 개수 (키워드 전용 인자, * 또는 ** 인자는 포함하지 않습니다)
| co_code | 컴파일된 날 바이트 코드의 문자열
| co_cellvars | (포함하는 스코프가 참조하는) 셀 변수 이름의 튜플
| co_consts | 바이트 코드에서 사용되는 상수의 튜플
| co_filename | 이 코드 객체가 만들어진 파일의 이름
| co_firstlineno | 파이썬 소스 코드의 첫 줄 번호
| co_flags | `CO_*` 플래그의 비트맵, 여기를 더 읽어보십시오
| co_lnotab | 줄 번호에서 바이트 코드 인덱스로의 인코딩된 매핑
| co_freevars | (함수의 클로저를 통해 참조되는) 자유 변수(free variables) 이름의 튜플
| co_posonlyargcount | 위치 전용 인자의 개수
| co_kwonlyargcount | 키워드 전용 인자의 개수 (** 인자는 제외합니다)
| co_name | 이 코드 객체가 정의된 이름
| co_names | 지역 변수 이름의 튜플
| co_nlocals | 지역 변수의 개수
| co_stacksize | 필요한 가상 기계 스택 공간
| co_varnames | 인자와 지역 변수 이름의 튜플
제너레이터 | __name__ | 이름
| __qualname__ | 정규화된 이름
| gi_frame | 프레임
| gi_running | 제너레이터가 실행 중입니까?
| gi_code | 코드
| gi_yieldfrom | `yield from`에 의해 이터레이트 중인 객체, 또는 `None`
코루틴 | __name__ | 이름
| __qualname__ | 정규화된 이름
| cr_await | 어웨이트 중인 객체, 또는 `None`
| cr_frame | 프레임
| cr_running | 코루틴이 실행 중입니까?
| cr_code | 코드
| cr_origin | 코루틴이 생성된 곳, 또는 `None`. `sys.set_coroutine_origin_tracking_depth()`를 참조하세요
내장 | __doc__ | 도큐멘테이션 문자열
| __name__ | 이 함수나 메서드의 원래 이름
| __qualname__ | 정규화된 이름
| __self__ | 메서드가 연결된 인스턴스, 또는 `None`

버전 3.5에서 변경: `__qualname__`과 `gi_yieldfrom` 어트리뷰트를 제너레이터에 추가합니다.

제너레이터의 `__name__` 어트리뷰트는 이제 코드 이름 대신 함수 이름에서 설정되며, 이제 수정할 수 있습니다.

버전 3.7에서 변경: 코루틴에 `cr_origin` 어트리뷰트를 추가합니다.

`inspect.``getmembers`(object[, predicate])

  이름으로 정렬된 `(name, value)` 쌍의 리스트로 객체(object)의 모든 멤버를 반환합니다. 각 멤버의 `value` 객체로 호출될 선택적 predicate 인자가 제공되면, predicate가 참값을 반환하는 멤버만 포함됩니다.

  참고

  `getmembers()`는 인자가 클래스이고 해당 클래스 어트리뷰트가 메타 클래스의 사용자 정의 `__dir__()`에서 나열될 때만 메타 클래스에 정의된 클래스 어트리뷰트를 반환합니다.

`inspect.``getmodulename`(path)

  감싸고 있는 패키지 이름 없이, 파일 경로(path)가 가리키는 모듈의 이름을 반환합니다. 파일 확장자는 `importlib.machinery.all_suffixes()`의 모든 항목에 대해 점검됩니다. 일치하면, 확장명이 제거된 최종 경로 구성 요소가 반환됩니다. 그렇지 않으면, `None`이 반환됩니다.

  이 함수는 오직 실제 파이썬 모듈로 의미 있는 이름만 반환합니다. 잠재적으로 파이썬 패키지를 가리키는 경로는 여전히 `None`을 반환합니다.

  버전 3.3에서 변경: 이 함수는 `importlib`에 직접 기반합니다.

`inspect.``ismodule`(object)

  객체가 모듈이면 `True`를 반환합니다.

`inspect.``isclass`(object)

  객체가 (내장이거나 파이썬 코드로 만든) 클래스이면 `True`를 반환합니다.

`inspect.``ismethod`(object)

  객체가 파이썬으로 작성된 연결된(bound) 메서드면 `True`를 반환합니다.

`inspect.``isfunction`(object)

  객체가 파이썬 함수이면 `True`를 반환합니다. 람다 표현식으로 만든 함수를 포함합니다.

`inspect.``isgeneratorfunction`(object)

  객체가 파이썬 제너레이터 함수이면 `True`를 반환합니다.

  버전 3.8에서 변경: 래핑 된 함수가 파이썬 제너레이터 함수일 때 `functools.partial()`로 래핑 된 함수는 이제 `True`를 반환합니다.

`inspect.``isgenerator`(object)

  객체가 제너레이터이면 `True`를 반환합니다.

`inspect.``iscoroutinefunction`(object)

  객체가 코루틴 함수(`async def` 문법으로 정의된 함수)이면 `True`를 반환합니다.

  버전 3.5에 추가.

  버전 3.8에서 변경: 래핑 된 함수가 코루틴 함수일 때 `functools.partial()`로 래핑 된 함수는 이제 `True`를 반환합니다.

`inspect.``iscoroutine`(object)

  객체가 `async def` 함수가 만든 코루틴이면 `True`를 반환합니다.

  버전 3.5에 추가.

`inspect.``isawaitable`(object)

  `await` 표현식에서 객체를 사용할 수 있으면 `True`를 반환합니다.

  제너레이터 기반 코루틴을 일반 제너레이터와 구별하는 데 사용할 수도 있습니다:

      def gen():
          yield
      @types.coroutine
      def gen_coro():
          yield

      assert not isawaitable(gen())
      assert isawaitable(gen_coro())

  버전 3.5에 추가.

`inspect.``isasyncgenfunction`(object)

  객체가 비동기 제너레이터 함수이면 `True`를 반환합니다, 예를 들면:

      >>> async def agen():
      ...     yield 1
      ...
      >>> inspect.isasyncgenfunction(agen)
      True

  버전 3.6에 추가.

  버전 3.8에서 변경: 래핑 된 함수가 비동기 제너레이터 함수일 때 `functools.partial()`로 래핑 된 함수는 이제 `True`를 반환합니다.

`inspect.``isasyncgen`(object)

  객체가 asynchronous generator 함수가 만든 비동기 제너레이터 이터레이터이면 `True`를 반환합니다.

  버전 3.6에 추가.

`inspect.``istraceback`(object)

  객체가 트레이스백이면 `True`를 반환합니다.

`inspect.``isframe`(object)

  객체가 프레임이면 `True`를 반환합니다.

`inspect.``iscode`(object)

  객체가 코드이면 `True`를 반환합니다.

`inspect.``isbuiltin`(object)

  객체가 내장 함수나 연결된(bound) 내장 메서드이면 `True`를 반환합니다.

`inspect.``isroutine`(object)

  객체가 사용자 정의이거나 내장 함수나 메서드이면 `True`를 반환합니다.

`inspect.``isabstract`(object)

  객체가 추상 베이스 클래스이면 `True`를 반환합니다.

`inspect.``ismethoddescriptor`(object)

  객체가 메서드 디스크립터이면 `True`를 반환하지만, `ismethod()`, `isclass()`, `isfunction()` 또는 `isbuiltin()`이 참일 때는 그렇지 않습니다.

  예를 들어, 이것은 `int.__add__`에 대해서 참입니다. 이 테스트를 통과한 객체에는 `__get__()` 메서드가 있지만 `__set__()` 메서드는 없습니다. 하지만 그 외의 어트리뷰트 집합은 달라집니다. `__name__` 어트리뷰트는 보통 존재하고, `__doc__`도 종종 그렇습니다.

  다른 테스트 중 하나를 통과하는 디스크립터로 구현된 메서드는 `ismethoddescriptor()` 테스트에서 `False`를 반환합니다. 단순히 다른 테스트가 더 많은 것을 약속하기 때문입니다 – 예를 들어, 객체가 `ismethod()`를 통과할 때 `__func__` 어트리뷰트(등)가 있다고 기대할 수 있습니다.

`inspect.``isdatadescriptor`(object)

  객체가 데이터 디스크립터이면 `True`를 반환합니다.

  데이터 디스크립터에는 `__set__`이나 `__delete__` 메서드가 있습니다. 예는 (파이썬으로 정의한) 프로퍼티, getset 및 멤버입니다. 뒤의 두 가지는 C로 정의되며 해당 형에 대해 더 구체적인 테스트가 있으며, 이는 다른 파이썬 구현에서도 지원됩니다. 일반적으로 데이터 디스크립터는 `__name__`과 `__doc__` 어트리뷰트를 갖지만 (프로퍼티, getet 및 멤버는 이 두 어트리뷰트를 모두 갖습니다), 이것이 보장되지는 않습니다.

`inspect.``isgetsetdescriptor`(object)

  객체가 getset 디스크립터이면 `True`를 반환합니다.

  CPython implementation detail: getset은 `PyGetSetDef` 구조체를 통해 확장 모듈에서 정의된 어트리뷰트입니다. 이러한 형이 없는 파이썬 구현에서, 이 메서드는 항상 `False`를 반환합니다.

`inspect.``ismemberdescriptor`(object)

  객체가 멤버 디스크립터이면 `True`를 반환합니다.

  CPython implementation detail: 멤버 디스크립터는 `PyMemberDef` 구조체를 통해 확장 모듈에서 정의된 어트리뷰트입니다. 이러한 형이 없는 파이썬 구현에서, 이 메서드는 항상 `False`를 반환합니다.

## 소스 코드 가져오기

`inspect.``getdoc`(object)

  `cleandoc()`으로 정리된 객체의 독스트링을 가져옵니다. 객체가 독스트링을 제공하지 않고 객체가 클래스, 메서드, 프로퍼티 또는 디스크립터이면, 상속 계층 구조에서 독스트링을 가져옵니다.

  버전 3.5에서 변경: 이제 재정의되지 않으면 독스트링이 상속됩니다.

`inspect.``getcomments`(object)

  객체의 소스 코드 바로 앞(클래스, 함수 또는 메서드일 때)이나 파이썬 소스 파일의 최상단 (객체가 모듈일 때) 주석 줄들을 단일 문자열로 반환합니다. 객체의 소스 코드를 사용할 수 없으면, `None`을 반환합니다. 객체가 C나 대화식 셸에서 정의될 때 이런 일이 일어날 수 있습니다.

`inspect.``getfile`(object)

  객체가 정의된 (텍스트나 바이너리) 파일의 이름을 반환합니다. 객체가 내장 모듈, 클래스 또는 함수이면 `TypeError`로 실패합니다.

`inspect.``getmodule`(object)

  객체가 정의된 모듈을 추측합니다.

`inspect.``getsourcefile`(object)

  객체가 정의된 파이썬 소스 파일의 이름을 반환합니다. 객체가 내장 모듈, 클래스 또는 함수이면 `TypeError`로 실패합니다.

`inspect.``getsourcelines`(object)

  객체의 소스 줄의 리스트와 시작 줄 번호를 반환합니다. 인자는 모듈, 클래스, 메서드, 함수, 트레이스백, 프레임 또는 코드 객체일 수 있습니다. 소스 코드는 객체에 해당하는 줄 리스트로 반환되며 줄 번호는 원본 소스 파일에서 첫 번째 코드 줄이 발견되는 위치를 나타냅니다. 소스 코드를 가져올 수 없으면 `OSError`가 발생합니다.

  버전 3.3에서 변경: `IOError` 대신 `OSError`가 발생합니다. 이제 IOError는 OSError의 별칭입니다.

`inspect.``getsource`(object)

  객체의 소스 코드 텍스트를 반환합니다. 인자는 모듈, 클래스, 메서드, 함수, 트레이스백, 프레임 또는 코드 객체일 수 있습니다. 소스 코드는 단일 문자열로 반환됩니다. 소스 코드를 가져올 수 없으면 `OSError`가 발생합니다.

  버전 3.3에서 변경: `IOError` 대신 `OSError`가 발생합니다. 이제 IOError는 OSError의 별칭입니다.

`inspect.``cleandoc`(doc)

  코드 블록과 일치하도록 들여쓰기 된 독스트링에서 들여쓰기를 정리합니다.

  모든 선행 공백이 첫 번째 줄에서 제거됩니다. 두 번째 줄부터 균일하게 제거할 수 있는 선행 공백이 제거됩니다. 시작과 끝의 빈 줄은 그다음에 제거됩니다. 또한, 모든 탭이 스페이스로 확장됩니다.

## Signature 객체로 콜러블 검사하기

버전 3.3에 추가.

Signature 객체는 콜러블 객체의 호출 서명과 반환 값 어노테이션을 나타냅니다. Signature 객체를 가져오려면, `signature()` 함수를 사용하십시오.

`inspect.``signature`(callable, *, follow_wrapped=True)

  주어진 `callable`에 대한 `Signature` 객체를 반환합니다:

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

      >>> sig = signature(foo)

      >>> str(sig)
      '(a, *, b:int, **kwargs)'

      >>> str(sig.parameters['b'])
      'b:int'

      >>> sig.parameters['b'].annotation
      <class 'int'>

  일반 함수와 클래스에서 `functools.partial()` 객체에 이르기까지 광범위한 파이썬 콜러블을 받아들입니다.

  서명을 제공할 수 없으면 `ValueError`가 발생하고, 해당 객체 형이 지원되지 않으면 `TypeError`가 발생합니다.

  함수 서명에서 슬래시(/)는 그 앞의 매개 변수가 위치 전용임을 나타냅니다. 자세한 내용은 위치 전용 인자에 관한 FAQ 항목을 참조하십시오.

  버전 3.5에 추가: `follow_wrapped` 매개 변수. 구체적으로 `callable`의 서명을 가져오려면 `False`를 전달하십시오 (데코레이트 된 콜러블의 래핑을 풀기 위해 `callable.__wrapped__`를 사용하지 않게 됩니다).

  참고

  특정 파이썬 구현에서 일부 콜러블은 검사할 수 없습니다. 예를 들어, CPython에서, C로 정의된 일부 내장 함수는 인자에 대한 메타 데이터를 제공하지 않습니다.

class `inspect.``Signature`(parameters=None, *, return_annotation=Signature.empty)

  Signature 객체는 함수의 호출 서명과 반환 값 어노테이션을 나타냅니다. 함수가 받아들이는 각 매개 변수에 대해 `parameters` 컬렉션에 `Parameter` 객체를 저장합니다.

  선택적 parameters 인자는 `Parameter` 객체의 시퀀스이며, 중복된 이름을 가진 매개 변수가 없는지, 매개 변수가 올바른 순서인지 (즉, 위치 전용이 먼저 온 후, 위치-키워드가 그다음에 오는지), 기본값이 있는 매개 변수가 그렇지 않은 매개 변수 뒤에 오는지 검사합니다.

  임의의 파이썬 객체일 수 있는, 선택적 return_annotation 인자는 콜러블의 “반환 값” 어노테이션입니다.

  Signature 객체는 불변(immutable)입니다. 수정된 사본을 만들려면 `Signature.replace()`를 사용하십시오.

  버전 3.5에서 변경: Signature 객체는 피클 가능하고 해시 가능합니다.

  `empty`

    반환 값 어노테이션이 없음을 지정하는 특수 클래스 수준 마커입니다.

  `parameters`

    매개 변수 이름에서 해당 `Parameter` 객체로의 순서 있는 매핑. 키워드 전용 매개 변수를 포함하여, 매개 변수는 엄격한 정의 순서대로 나타납니다.

    버전 3.7에서 변경: 실제로 파이썬 3에서 항상 유지되었습니다만, 파이썬은 버전 3.7부터 키워드 전용 매개 변수의 선언 순서를 유지한다는 것을 명시적으로 보장합니다.

  `return_annotation`

    콜러블의 “반환 값” 어노테이션. 콜러블에 “반환 값” 어노테이션이 없으면, 이 어트리뷰트는 `Signature.empty`로 설정됩니다.

  `bind`(*args, **kwargs)

    위치와 키워드 인자에서 매개 변수로의 매핑을 만듭니다. `*args`와 `**kwargs`가 서명과 일치하면 `BoundArguments`를 반환하고, 그렇지 않으면 `TypeError`를 발생시킵니다.

  `bind_partial`(*args, **kwargs)

    `Signature.bind()`와 같은 방식으로 작동하지만, 일부 필수 인자를 생략 할 수 있습니다 (`functools.partial()` 동작을 흉내 냅니다). `BoundArguments`를 반환하거나, 전달된 인자가 서명과 일치하지 않으면 `TypeError`를 발생시킵니다.

  `replace`(*[, parameters][, return_annotation])

    replace가 호출된 인스턴스를 기반으로 새 Signature 인스턴스를 만듭니다. 다른 `parameters`나 `return_annotation` 또는 둘 모두를 전달하여 기반 서명의 해당 속성을 재정의할 수 있습니다. 복사된 Signature에서 return_annotation을 제거하려면, `Signature.empty`를 전달하십시오.

        >>> def test(a, b):
        ...     pass
        >>> sig = signature(test)
        >>> new_sig = sig.replace(return_annotation="new return anno")
        >>> str(new_sig)
        "(a, b) -> 'new return anno'"

  classmethod `from_callable`(obj, *, follow_wrapped=True)

    주어진 콜러블 `obj`에 대한 `Signature` (또는 이의 서브 클래스) 객체를 반환합니다. `__wrapped__` 체인의 래핑을 풀지 않고 `obj`의 서명을 얻으려면 `follow_wrapped=False`를 전달하십시오.

    이 메서드는 `Signature`의 서브 클래싱을 단순화합니다:

        class MySignature(Signature):
            pass
        sig = MySignature.from_callable(min)
        assert isinstance(sig, MySignature)

    버전 3.5에 추가.

class `inspect.``Parameter`(name, kind, *, default=Parameter.empty, annotation=Parameter.empty)

  Parameter 객체는 불변(immutable)입니다. Parameter 객체를 수정하는 대신, 수정된 사본을 만들려면 `Parameter.replace()`를 사용하십시오.

  버전 3.5에서 변경: Parameter 객체는 피클 가능하고 해시 가능합니다.

  `empty`

    기본값과 어노테이션이 없음을 지정하는 특수 클래스 수준 마커.

  `name`

    문자열로 표현한 매개 변수의 이름. 이름은 유효한 파이썬 식별자여야 합니다.

    CPython implementation detail: CPython은 컴프리헨션과 제너레이터 표현식을 구현하는 데 사용되는 코드 객체에서 `.0` 형식의 묵시적 매개 변수 이름을 생성합니다.

    버전 3.6에서 변경: 이 매개 변수 이름은 이 모듈에서 `implicit0`과 같은 이름으로 노출됩니다.

  `default`

    매개 변수의 기본값. 매개 변수에 기본값이 없으면, 이 어트리뷰트는 `Parameter.empty`로 설정됩니다.

  `annotation`

    매개 변수의 어노테이션. 매개 변수에 어노테이션이 없으면, 이 어트리뷰트는 `Parameter.empty`로 설정됩니다.

  `kind`

    인자 값이 매개 변수에 연결되는 방법을 설명합니다. 가능한 값은 다음과 같습니다 (`Parameter.KEYWORD_ONLY`처럼 `Parameter`를 통해 액세스할 수 있습니다):

    이름 | 의미
    --- | ---
    POSITIONAL_ONLY | 위치 인자로만 값을 제공해야 합니다. 위치 전용 매개 변수는 파이썬 함수 정의에서 `/` 항목 (있다면) 앞에 나오는 매개 변수입니다.
    POSITIONAL_OR_KEYWORD | 값은 키워드나 위치 인자로 제공될 수 있습니다 (이것이 파이썬으로 구현된 함수의 표준 연결 동작입니다).
    VAR_POSITIONAL | 다른 매개 변수에 연결되지 않은 위치 인자의 튜플. 이것은 파이썬 함수 정의의 `*args` 매개 변수에 해당합니다.
    KEYWORD_ONLY | 키워드 인자로만 값을 제공해야 합니다. 키워드 전용 매개 변수는 파이썬 함수 정의에서 `*`나 `*args` 항목 다음에 나오는 매개 변수입니다.
    VAR_KEYWORD | 다른 매개 변수에 연결되지 않은 키워드 인자의 딕셔너리. 이것은 파이썬 함수 정의의 `**kwargs` 매개 변수에 해당합니다.

    예: 기본값이 없는 모든 키워드 전용 인자를 인쇄합니다:

        >>> def foo(a, b, *, c, d=10):
        ...     pass

        >>> sig = signature(foo)
        >>> for param in sig.parameters.values():
        ...     if (param.kind == param.KEYWORD_ONLY and
        ...                        param.default is param.empty):
        ...         print('Parameter:', param)
        Parameter: c

  `kind.``description`

    Parameter.kind의 열거형 값을 설명합니다.

    버전 3.8에 추가.

    예: 모든 인자의 설명을 인쇄합니다:

        >>> def foo(a, b, *, c, d=10):
        ...     pass

        >>> sig = signature(foo)
        >>> for param in sig.parameters.values():
        ...     print(param.kind.description)
        positional or keyword
        positional or keyword
        keyword-only
        keyword-only

  `replace`(*[, name][, kind][, default][, annotation])

    > replace가 호출된 인스턴스를 기반으로 새 Parameter 인스턴스를 만듭니다. `Parameter` 어트리뷰트를 재정의하려면, 해당 인자를 전달하십시오. Parameter에서 기본값이나 어노테이션, 또는 둘 다 제거하려면 `Parameter.empty`를 전달하십시오.

    >     >>> from inspect import Parameter
    >     >>> param = Parameter('foo', Parameter.KEYWORD_ONLY, default=42)
    >     >>> str(param)
    >     'foo=42'

    >     >>> str(param.replace()) # Will create a shallow copy of 'param'
    >     'foo=42'

    >     >>> str(param.replace(default=Parameter.empty, annotation='spam'))
    >     "foo:'spam'"

    버전 3.4에서 변경: 파이썬 3.3에서, `kind`가 `POSITIONAL_ONLY`로 설정되었을 때 Parameter 객체의 `name`을 `None`으로 설정할 수 있었습니다. 이는 더는 허용되지 않습니다.

class `inspect.``BoundArguments`

  `Signature.bind()`나 `Signature.bind_partial()` 호출의 결과. 인자에서 함수의 매개 변수로의 매핑을 보관합니다.

  `arguments`

    An ordered, mutable mapping (`collections.OrderedDict`) of parameters’ names to arguments’ values. Contains only explicitly bound arguments. Changes in `arguments` will reflect in `args` and `kwargs`.

    인자 처리 목적으로 `Signature.parameters`와 함께 사용해야 합니다.

    참고

    `Signature.bind()`나 `Signature.bind_partial()`이 기본값에 의존하는 인자는 건너뜁니다. 그러나, 필요하다면 `BoundArguments.apply_defaults()`를 사용하여 추가하십시오.

  `args`

    위치 인자 값의 튜플. `arguments` 어트리뷰트에서 동적으로 계산됩니다.

  `kwargs`

    키워드 인자 값의 딕셔너리. `arguments` 어트리뷰트에서 동적으로 계산됩니다.

  `signature`

    부모 `Signature` 객체에 대한 참조.

  `apply_defaults`()

    누락된 인자에 대한 기본값을 설정합니다.

    가변 위치 인자(`*args`)의 기본값은 빈 튜플입니다.

    가변 변수 키워드 인자(`**kwargs`)의 기본값은 빈 딕셔너리입니다.

        >>> def foo(a, b='ham', *args): pass
        >>> ba = inspect.signature(foo).bind('spam')
        >>> ba.apply_defaults()
        >>> ba.arguments
        OrderedDict([('a', 'spam'), ('b', 'ham'), ('args', ())])

    버전 3.5에 추가.

  `args`와 `kwargs` 프로퍼티를 사용하여 함수를 호출할 수 있습니다:

      def test(a, *, b):
          ...

      sig = signature(test)
      ba = sig.bind(10, b=20)
      test(*ba.args, **ba.kwargs)

더 보기

PEP 362 - 함수 Signature 객체.

  자세한 명세, 구현 세부 사항 및 예

## 클래스와 함수

`inspect.``getclasstree`(classes, unique=False)

  주어진 클래스 리스트를 중첩된 리스트의 계층 구조로 배치합니다. 중첩된 리스트가 나타나면, 리스트 바로 앞에 나오는 항목의 클래스에서 파생된 클래스를 포함합니다. 각 항목은 클래스와 베이스 클래스의 튜플을 포함하는 2-튜플입니다. unique 인자가 참이면, 주어진 리스트의 각 클래스가 반환된 구조에 정확히 하나의 항목으로 나타납니다. 그렇지 않으면, 다중 상속을 사용하는 클래스와 그 자식들이 여러 번 나타납니다.

`inspect.``getargspec`(func)

  파이썬 함수 매개 변수의 이름과 기본값을 가져옵니다. 네임드 튜플 `ArgSpec(args, varargs, keywords, defaults)`가 반환됩니다. args는 매개 변수 이름의 리스트입니다. varargs와 keywords는 `*`와 `**` 매개 변수의 이름이거나 `None`입니다. defaults는 기본 인자 값의 튜플이거나 기본 인자가 없으면 `None`입니다; 이 튜플에 n 개의 요소가 있으면, args에 나열된 마지막 n 요소에 해당합니다.

  버전 3.0부터 폐지: 개정된 API의 `getfullargspec()`을 사용하십시오. 이것은 일반적으로 드롭인 대체이면서, 함수 어노테이션과 키워드 전용 매개 변수도 올바르게 처리합니다.

  또는, `signature()`와 Signature 객체를 사용하십시오. 콜러블에 대한 보다 구조적인 내부 검사(introspection) API를 제공합니다.

`inspect.``getfullargspec`(func)

  파이썬 함수 매개 변수의 이름과 기본값을 가져옵니다. 네임드 튜플이 반환됩니다:

  `FullArgSpec(args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations)`

  args는 위치 매개 변수 이름의 리스트입니다. varargs는 `*` 매개 변수의 이름이거나 임의의 위치 인자가 허용되지 않으면 `None`입니다. varkw는 `**` 매개 변수의 이름이거나 임의의 키워드 인자가 허용되지 않으면 `None`입니다. defaults는 마지막 n 개의 위치 매개 변수에 해당하는 기본 인자 값의 n-튜플이거나, 이러한 기본값이 정의되지 않으면 `None`입니다. kwonlyargs는 선언 순서를 따르는 키워드 전용 매개 변수 이름 리스트입니다. kwonlydefaults는 kwonlyargs의 매개 변수 이름에서 인자가 제공되지 않을 때 사용되는 기본값으로의 딕셔너리 매핑입니다. annotations는 매개 변수 이름에서 어노테이션으로의 딕셔너리 매핑입니다. 특수키 `"return"`은 함수 반환 값 어노테이션(있다면)을 보고하는 데 사용됩니다.

  `signature()`와 Signature 객체가 콜러블 내부 검사에 권장되는 API를 제공하고, 확장 모듈 API에서 종종 등장하는 추가 동작(위치 전용 인자와 같은)을 지원함에 유의하십시오. 이 함수는 주로 파이썬 2 `inspect` 모듈 API와의 호환성을 유지해야 하는 코드에서 사용하기 위해 유지됩니다.

  버전 3.4에서 변경: 이 함수는 이제 `signature()`를 기반으로 하지만, 여전히 `__wrapped__` 어트리뷰트를 무시하고 연결된(bound) 메서드의 서명 출력에 이미 연결된 첫 번째 매개 변수를 포함합니다.

  버전 3.6에서 변경: 이 메서드는 이전에 파이썬 3.5에서 `signature()`로 대신하면서 폐지된 것으로 문서화되었지만, 레거시 `getargspec()` API에서 마이그레이션 하는 단일 소스 파이썬 2/3 코드를 위한 명확하게 지원되는 표준 인터페이스를 복원하기 위해 이 결정을 번복했습니다.

  버전 3.7에서 변경: 실제로 파이썬 3에서 항상 유지되었습니다만, 파이썬은 버전 3.7부터 키워드 전용 매개 변수의 선언 순서를 유지한다는 것을 명시적으로 보장합니다.

`inspect.``getargvalues`(frame)

  특정 프레임으로 전달된 인자에 대한 정보를 얻습니다. 네임드 튜플 `ArgInfo(args, varargs, keywords, locals)`가 반환됩니다. args는 인자 이름의 리스트입니다. varargs와 keywords는 `*`와 `**` 인자의 이름이거나 `None`입니다. locals는 주어진 프레임의 지역 딕셔너리입니다.

  참고

  이 함수는 실수로 파이썬 3.5에서 폐지된 것으로 표시되었습니다.

`inspect.``formatargspec`(args[, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations[, formatarg, formatvarargs, formatvarkw, formatvalue, formatreturns, formatannotations]])

  `getfullargspec()` 이 반환한 값으로 예쁜 인자 명세를 포맷합니다.

  처음 7개의 인자는 (`args`, `varargs`, `varkw`, `defaults`, `kwonlyargs`, `kwonlydefaults`, `annotations`) 입니다.

  다른 6개의 인자는 인자 이름, `*` 인자 이름, `**` 인자 이름, 기본값, 반환 값 어노테이션 및 개별 어노테이션을 각각 문자열로 변환하기 위해 호출되는 함수입니다.

  예를 들면:

      >>> from inspect import formatargspec, getfullargspec
      >>> def f(a: int, b: float):
      ...     pass
      ...
      >>> formatargspec(*getfullargspec(f))
      '(a: int, b: float)'

  버전 3.5부터 폐지: `signature()`와 Signature 객체를 사용하십시오. 콜러블에 대한 더 나은 내부 검사 API를 제공합니다.

`inspect.``formatargvalues`(args[, varargs, varkw, locals, formatarg, formatvarargs, formatvarkw, formatvalue])

  `getargvalues()`가 반환한 4개의 값으로 예쁜 인자 명세를 포맷합니다. format* 인자는 해당 이름과 값을 문자열로 변환하기 위해 호출되는 선택적 포매팅 함수입니다.

  참고

  이 함수는 실수로 파이썬 3.5에서 폐지된 것으로 표시되었습니다.

`inspect.``getmro`(cls)

  클래스 cls의 베이스 클래스의 튜플(cls를 포함합니다)을 메서드 결정 순서로 반환합니다. 이 튜플에는 클래스가 두 번 이상 나타나지 않습니다. 메서드 결정 순서는 cls의 형에 따라 다릅니다. 매우 독특한 사용자 정의 메타 형을 사용하지 않는 한, cls는 튜플의 첫 번째 요소가 됩니다.

`inspect.``getcallargs`(func, /, *args, **kwds)

  args와 kwds를 마치 이들로 호출된 것처럼 파이썬 함수나 메서드 func의 인자 이름에 연결합니다. 연결된 메서드의 경우, 첫 번째 인자(일반적으로 `self`라고 합니다)도 해당 인스턴스에 연결합니다. 인자 이름(있다면, `*`와 `**` 인자의 이름도 포함합니다)을 args와 kwds의 값으로 매핑하는 딕셔너리가 반환됩니다. func를 잘못 호출하는 경우, 즉 호환되지 않는 서명으로 인해 `func(*args, **kwds)`가 예외를 발생시키게 될 때마다, 같은 형의 예외가 같거나 유사한 메시지로 발생합니다. 예를 들면:

      >>> from inspect import getcallargs
      >>> def f(a, b=1, *pos, **named):
      ...     pass
      >>> getcallargs(f, 1, 2, 3) == {'a': 1, 'named': {}, 'b': 2, 'pos': (3,)}
      True
      >>> getcallargs(f, a=2, x=4) == {'a': 2, 'named': {'x': 4}, 'b': 1, 'pos': ()}
      True
      >>> getcallargs(f)
      Traceback (most recent call last):
      ...
      TypeError: f() missing 1 required positional argument: 'a'

  버전 3.2에 추가.

  버전 3.5부터 폐지: 대신 `Signature.bind()`와 `Signature.bind_partial()`을 사용하십시오.

`inspect.``getclosurevars`(func)

  파이썬 함수나 메서드 func에 있는 외부 이름 참조에서 현재 값으로의 매핑을 얻습니다. 네임드 튜플 `ClosureVars(nonlocals, globals, builtins, unbound)`가 반환됩니다. nonlocals는 참조된 이름을 어휘 클로저(closure) 변수로, globals는 함수의 모듈 전역으로, builtins는 함수 바디에서 볼 수 있는 내장으로 매핑합니다. unbound는 현재 모듈 전역과 내장에서 전혀 결정할 수 없는 함수에서 참조된 이름 집합입니다.

  func가 파이썬 함수나 메서드가 아니면 `TypeError`가 발생합니다.

  버전 3.3에 추가.

`inspect.``unwrap`(func, *, stop=None)

  func로 래핑 된 객체를 가져옵니다. 체인의 마지막 객체를 반환하는 `__wrapped__` 어트리뷰트의 체인을 따라갑니다.

  stop은 래퍼 체인의 객체를 유일한 인자로 받아들이는 선택적 콜백으로, 콜백이 참값을 반환할 때 언 래핑을 조기에 종료 할 수 있도록 합니다. 콜백이 참값을 반환하지 않으면, 체인의 마지막 객체가 평소처럼 반환됩니다. 예를 들어, `signature()`는 이것을 사용하여 체인에 있는 객체에 `__signature__` 어트리뷰트가 정의되면 언 래핑을 중지합니다.

  순환이 발견되면 `ValueError`가 발생합니다.

  버전 3.4에 추가.

## 인터프리터 스택

다음 함수가 “프레임 레코드”를 반환할 때, 각 레코드는 네임드 튜플 `FrameInfo(frame, filename, lineno, function, code_context, index)`입니다. 튜플에는 프레임 객체, 파일명, 현재 줄의 줄 번호, 함수 이름, 소스 코드의 문맥(context) 줄 리스트 및 그 리스트 내에서의 현재 줄의 인덱스가 포함됩니다.

버전 3.5에서 변경: 튜플 대신 네임드 튜플을 반환합니다.

참고

이러한 함수가 반환하는 프레임 레코드의 첫 번째 요소에서 발견되는 것처럼, 프레임 객체에 대한 참조를 유지하면 프로그램이 참조 순환을 만들 수 있습니다. 일단 참조 순환이 생성되면, 파이썬의 선택적 순환 검출기가 활성화되어 있어도, 순환을 형성하는 객체에서 액세스 할 수 있는 모든 객체의 수명이 훨씬 더 길어질 수 있습니다. 이러한 순환을 만들어야만 하면, 명시적으로 끊어서 객체의 지연된 파괴와 메모리 소비 증가를 피하는 것이 중요합니다.

순환 감지기가 이를 잡기는 하겠지만, `finally` 절에서 순환을 제거하여 프레임(과 지역 변수)의 파괴를 결정적(deterministic)으로 만들 수 있습니다. 파이썬을 컴파일할 때나 `gc.disable()`을 사용해서 순환 감지기를 비활성화했을 때도 중요합니다. 예를 들면:

    def handle_stackframe_without_leak():
        frame = inspect.currentframe()
        try:
            # do something with the frame
        finally:
            del frame

프레임을 계속 유지하려면 (예를 들어 나중에 트레이스백을 인쇄하려고) `frame.clear()` 메서드를 사용하여 참조 순환을 끊을 수도 있습니다.

이 함수들 대부분이 지원하는 선택적 context 인자는 반환할 문맥(context) 줄 수를 지정합니다. 이 줄들은 현재 줄을 중심으로 합니다.

`inspect.``getframeinfo`(frame, context=1)

  프레임이나 트레이스백 객체에 대한 정보를 얻습니다. 네임드 튜플 `Traceback(filename, lineno, function, code_context, index)`가 반환됩니다.

`inspect.``getouterframes`(frame, context=1)

  frame과 모든 외부(outer) 프레임에 대한 프레임 레코드 리스트를 얻습니다. 이 프레임들은 frame을 만들도록 한 호출을 나타냅니다. 반환된 리스트의 첫 번째 항목은 frame을 나타냅니다; 마지막 항목은 frame의 스택에서 가장 바깥쪽 호출을 나타냅니다.

  버전 3.5에서 변경: 네임드 튜플 `FrameInfo(frame, filename, lineno, function, code_context, index)`의 리스트가 반환됩니다.

`inspect.``getinnerframes`(traceback, context=1)

  traceback의 프레임과 모든 내부(inner) 프레임에 대한 프레임 레코드 리스트를 얻습니다. 이 프레임들은 frame의 결과로 만들어진 호출을 나타냅니다. 리스트의 첫 번째 항목은 traceback을 나타냅니다; 마지막 항목은 예외가 발생한 위치를 나타냅니다.

  버전 3.5에서 변경: 네임드 튜플 `FrameInfo(frame, filename, lineno, function, code_context, index)`의 리스트가 반환됩니다.

`inspect.``currentframe`()

  호출자의 스택 프레임에 대한 프레임 객체를 반환합니다.

  CPython implementation detail: 이 함수는 인터프리터의 파이썬 스택 프레임 지원에 의존하며, 모든 파이썬 구현에서 제공된다고 보장되는 것은 아닙니다. 파이썬 스택 프레임 지원이 없는 구현에서 실행하면, 이 함수는 `None`을 반환합니다.

`inspect.``stack`(context=1)

  호출자의 스택에 대한 프레임 레코드 리스트를 반환합니다. 반환된 리스트의 첫 번째 항목은 호출자를 나타냅니다; 마지막 항목은 스택에서 가장 바깥쪽 호출을 나타냅니다.

  버전 3.5에서 변경: 네임드 튜플 `FrameInfo(frame, filename, lineno, function, code_context, index)`의 리스트가 반환됩니다.

`inspect.``trace`(context=1)

  현재 프레임과 현재 처리 중인 예외가 발생한 프레임 사이의 스택에 대한 프레임 레코드 리스트를 반환합니다. 리스트의 첫 번째 항목은 호출자를 나타냅니다; 마지막 항목은 예외가 발생한 위치를 나타냅니다.

  버전 3.5에서 변경: 네임드 튜플 `FrameInfo(frame, filename, lineno, function, code_context, index)`의 리스트가 반환됩니다.

## 정적으로 어트리뷰트 가져오기

`getattr()`과 `hasattr()`은 모두 어트리뷰트를 가져오거나 존재하는지 확인할 때 코드 실행을 유발할 수 있습니다. 프로퍼티와 같은 디스크립터가 호출되고 `__getattr__()`과 `__getattribute__()`가 호출될 수 있습니다.

문서화 도구처럼 수동적인(passive) 검사를 원할 때는 불편할 수 있습니다. `getattr_static()`은 `getattr()`과 같은 서명을 갖지만 어트리뷰트를 가져올 때 코드 실행을 피합니다.

`inspect.``getattr_static`(obj, attr, default=None)

  디스크립터 프로토콜, `__getattr__()` 또는 `__getattribute__()`를 통한 동적 조회를 일으키지 않고 어트리뷰트를 조회합니다.

  참고: 이 함수는 getattr이 가져올 수 있는 모든 어트리뷰트를 조회하지 못할 수 있으며 (가령 동적으로 만들어진 어트리뷰트), getattr이 가져올 수 없는 어트리뷰트를 찾을 수 있습니다 (가령 AttributeError를 발생시키는 디스크립터). 또한 인스턴스 멤버 대신 디스크립터 객체를 반환할 수도 있습니다.

  인스턴스 `__dict__`가 다른 멤버(예를 들어 프로퍼티)에 의해 가려지면 이 함수는 인스턴스 멤버를 찾을 수 없습니다.

  버전 3.2에 추가.

`getattr_static()`은 디스크립터를 해석하지 않습니다, 예를 들어 C로 구현된 객체의 슬롯 디스크립터나 getset 디스크립터. 하부 어트리뷰트 대신 디스크립터 객체가 반환됩니다.

다음과 같은 코드로 이를 처리할 수 있습니다. 임의의 getset 디스크립터에 대해 이를 호출하면 코드 실행이 유발될 수 있음에 유의하십시오:

    # example code for resolving the builtin descriptor types
    class _foo:
        __slots__ = ['foo']

    slot_descriptor = type(_foo.foo)
    getset_descriptor = type(type(open(__file__)).name)
    wrapper_descriptor = type(str.__dict__['__add__'])
    descriptor_types = (slot_descriptor, getset_descriptor, wrapper_descriptor)

    result = getattr_static(some_object, 'foo')
    if type(result) in descriptor_types:
        try:
            result = result.__get__()
        except AttributeError:
            # descriptors can raise AttributeError to
            # indicate there is no underlying value
            # in which case the descriptor itself will
            # have to do
            pass

## 제너레이터와 코루틴의 현재 상태

코루틴 스케줄러를 구현할 때와 기타 제너레이터의 고급 사용을 위해, 제너레이터가 현재 실행 중인지, 시작, 재개 또는 실행을 대기하는 중인지, 또는 이미 종료되었는지를 판별하는 것이 유용합니다. `getgeneratorstate()`를 사용하면 제너레이터의 현재 상태를 쉽게 확인할 수 있습니다.

`inspect.``getgeneratorstate`(generator)

  제너레이터-이터레이터의 현재 상태를 가져옵니다.

  가능한 상태는 다음과 같습니다:

    - GEN_CREATED: 실행 시작을 기다리는 중입니다.

    - GEN_RUNNING: 현재 인터프리터에서 실행 중입니다.

    - GEN_SUSPENDED: 현재 일드(yield) 표현식에서 일시 중지되었습니다.

    - GEN_CLOSED: 실행이 완료되었습니다.

  버전 3.2에 추가.

`inspect.``getcoroutinestate`(coroutine)

  코루틴 객체의 현재 상태를 가져옵니다. 이 함수는 `async def` 함수가 만든 코루틴 객체와 함께 사용하기 위한 것이지만, `cr_running`과 `cr_frame` 어트리뷰트가 있는 임의의 코루틴류 객체를 허용합니다.

  가능한 상태는 다음과 같습니다:

    - CORO_CREATED: 실행 시작을 기다리는 중입니다.

    - CORO_RUNNING: 현재 인터프리터에서 실행 중입니다.

    - CORO_SUSPENDED: 현재 어웨이트(await) 표현식에서 일시 중지되었습니다.

    - CORO_CLOSED: 실행이 완료되었습니다.

  버전 3.5에 추가.

제너레이터의 현재 내부 상태도 조회할 수 있습니다. 이는 주로 내부 상태가 예상대로 갱신되었는지 확인하는 테스트 목적으로 유용합니다:

`inspect.``getgeneratorlocals`(generator)

  generator의 라이브 로컬 변수에서 그것의 현재 값으로의 매핑을 얻습니다. 변수 이름을 값으로 매핑하는 딕셔너리가 반환됩니다. 이것은 제너레이터 바디에서 `locals()`를 호출하는 것과 동등하며, 같은 경고가 모두 적용됩니다.

  generator가 현재 연결된 프레임이 없는 제너레이터이면, 빈 딕셔너리가 반환됩니다. generator가 파이썬 제너레이터 객체가 아니면 `TypeError`가 발생합니다.

  CPython implementation detail: 이 함수는 내부 검사를 위해 파이썬 스택 프레임을 노출하는 제너레이터에 의존하며, 모든 파이썬 구현에서 보장되는 것은 아닙니다. 그럴 경우, 이 함수는 항상 빈 딕셔너리를 반환합니다.

  버전 3.3에 추가.

`inspect.``getcoroutinelocals`(coroutine)

  이 함수는 `getgeneratorlocals()`와 유사하지만, `async def` 함수가 만든 코루틴 객체에 작동합니다.

  버전 3.5에 추가.

## 코드 객체 비트 플래그

파이썬 코드 객체에는 `co_flags` 어트리뷰트가 있으며, 이는 다음 플래그의 비트맵입니다:

`inspect.``CO_OPTIMIZED`

  코드 객체는 빠른 locals(fast locals)를 사용하여 최적화되었습니다.

`inspect.``CO_NEWLOCALS`

  설정되면, 코드 객체가 실행될 때 프레임의 `f_locals`에 대한 새 딕셔너리가 만들어집니다.

`inspect.``CO_VARARGS`

  코드 객체에는 (`*args` 같은) 가변 위치 매개 변수가 있습니다.

`inspect.``CO_VARKEYWORDS`

  코드 객체에는 (`**kwargs` 같은) 가변 키워드 매개 변수가 있습니다.

`inspect.``CO_NESTED`

  코드 객체가 중첩 함수일 때 이 플래그가 설정됩니다.

`inspect.``CO_GENERATOR`

  코드 객체가 제너레이터 함수일 때, 즉 코드 객체가 실행될 때 제너레이터 객체를 반환할 때 이 플래그가 설정됩니다.

`inspect.``CO_NOFREE`

  자유 변수(free variable)와 셀 변수(cell variable)가 없으면 이 플래그가 설정됩니다.

`inspect.``CO_COROUTINE`

  코드 객체가 코루틴 함수일 때 이 플래그가 설정됩니다. 코드 객체가 실행될 때 코루틴 객체를 반환합니다. 자세한 내용은 PEP 492를 참조하십시오.

  버전 3.5에 추가.

`inspect.``CO_ITERABLE_COROUTINE`

  이 플래그는 제너레이터를 제너레이터 기반 코루틴으로 변환하는 데 사용됩니다. 이 플래그가 있는 제너레이터 객체는 `await` 표현식에 사용될 수 있으며, 코루틴 객체를 `yield from` 할 수 있습니다. 자세한 내용은 PEP 492를 참조하십시오.

  버전 3.5에 추가.

`inspect.``CO_ASYNC_GENERATOR`

  코드 객체가 비동기 제너레이터 함수일 때 이 플래그가 설정됩니다. 코드 객체가 실행될 때 비동기 제너레이터 객체가 반환됩니다. 자세한 내용은 PEP 525를 참조하십시오.

  버전 3.6에 추가.

참고

이 플래그들은 CPython에만 해당하며, 다른 파이썬 구현에서는 정의되지 않을 수 있습니다. 또한 플래그는 구현 세부 사항이며, 향후 파이썬 배포에서 제거되거나 폐지될 수 있습니다. 모든 내부 검사에는 `inspect` 모듈의 공개 API를 사용하는 것이 좋습니다.

## 명령 줄 인터페이스

`inspect` 모듈은 명령 줄에서 기본 내부 검사 기능을 제공하기도 합니다.

기본적으로, 모듈의 이름을 받아들이고 해당 모듈의 소스를 인쇄합니다. 콜론과 대상 객체의 정규화된 이름을 덧붙여, 대신 모듈 내의 클래스나 함수를 인쇄 할 수 있습니다.

`--details```

  소스 코드 대신에 지정된 객체에 대한 정보를 인쇄합니다