객체 프로토콜
*************

PyObject* Py_NotImplemented

   지정된 형 조합에 대해 연산이 구현되지 않았음을 알리는 데 사용되는
   "NotImplemented" 싱글톤.

Py_RETURN_NOTIMPLEMENTED

   C 함수 내에서 "Py_NotImplemented" 반환을 올바르게 처리합니다 (즉,
   NotImplemented의 참조 횟수를 증가시키고 반환합니다).

int PyObject_Print(PyObject *o, FILE *fp, int flags)

   파일 *fp*에 객체 *o*를 인쇄합니다. 에러 시 "-1"을 반환합니다. flags
   인자는 특정 인쇄 옵션을 활성화하는 데 사용됩니다. 현재 지원되는 유
   일한 옵션은 "Py_PRINT_RAW"입니다; 주어지면, "repr()" 대신 객체의
   "str()"이 기록됩니다.

int PyObject_HasAttr(PyObject *o, PyObject *attr_name)

   *o*에 *attr_name* 어트리뷰트가 있으면 "1"을, 그렇지 않으면 "0"을 반
   환합니다. 이것은 파이썬 표현식 "hasattr(o, attr_name)"과 동등합니다
   . 이 함수는 항상 성공합니다.

   "__getattr__()"과 "__getattribute__()" 메서드를 호출하는 동안 발생
   하는 예외는 억제됨에 유의하십시오. 에러 보고를 얻으려면 대신
   "PyObject_GetAttr()"을 사용하십시오.

int PyObject_HasAttrString(PyObject *o, const char *attr_name)

   *o*에 *attr_name* 어트리뷰트가 있으면 "1"을, 그렇지 않으면 "0"을 반
   환합니다. 이것은 파이썬 표현식 "hasattr(o, attr_name)"과 동등합니다
   . 이 함수는 항상 성공합니다.

   "__getattr__()"과 "__getattribute__()" 메서드를 호출하고 임시 문자
   열 객체를 만드는 중에 발생하는 예외는 억제됨에 유의하십시오. 에러
   보고를 얻으려면 대신 "PyObject_GetAttrString()"을 사용하십시오.

PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name)
    *Return value: New reference.*

   객체 *o*에서 *attr_name*이라는 이름의 어트리뷰트를 가져옵니다. 성공
   하면 어트리뷰트 값을, 실패하면 "NULL"을 반환합니다. 이것은 파이썬
   표현식 "o.attr_name"과 동등합니다.

PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name)
    *Return value: New reference.*

   객체 *o*에서 *attr_name*이라는 이름의 어트리뷰트를 가져옵니다. 성공
   하면 어트리뷰트 값을, 실패하면 "NULL"을 반환합니다. 이것은 파이썬
   표현식 "o.attr_name"과 동등합니다.

PyObject* PyObject_GenericGetAttr(PyObject *o, PyObject *name)
    *Return value: New reference.*

   형 객체의 "tp_getattro" 슬롯에 배치되는 일반 어트리뷰트 게터
   (getter) 함수. 객체의 (있다면) "__dict__"에 있는 어트리뷰트뿐만 아
   니라 객체의 MRO에 있는 클래스의 딕셔너리에 있는 디스크립터를 찾습니
   다. 디스크립터 구현하기에 요약된 것처럼, 데이터 디스크립터는 인스턴
   스 어트리뷰트보다 우선하지만, 비 데이터 디스크립터는 그렇지 않습니
   다. 그렇지 않으면, "AttributeError"가 발생합니다.

int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)

   객체 *o*에 대해, *attr_name*이라는 이름의 어트리뷰트 값을 *v* 값으
   로 설정합니다. 실패 시 예외를 발생시키고 "-1"을 반환합니다. 성공하
   면 "0"을 반환합니다. 이것은 파이썬 문장 "o.attr_name = v"와 동등합
   니다.

   *v*가 "NULL"이면, 어트리뷰트가 삭제되지만, 이 기능은 폐지되었고
   "PyObject_DelAttr()"로 대체되었습니다.

int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)

   객체 *o*에 대해, *attr_name*이라는 이름의 어트리뷰트 값을 *v* 값으
   로 설정합니다. 실패 시 예외를 발생시키고 "-1"을 반환합니다. 성공하
   면 "0"을 반환합니다. 이것은 파이썬 문장 "o.attr_name = v"와 동등합
   니다.

   *v*가 "NULL"이면, 어트리뷰트가 삭제되지만, 이 기능은 폐지되었고
   "PyObject_DelAttrString()"으로 대체되었습니다.

int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)

   형 객체의 "tp_setattro" 슬롯에 배치되는 일반 어트리뷰트 세터
   (setter)와 딜리터(deleter) 함수. 객체의 MRO에 있는 클래스의 딕셔너
   리에서 데이터 디스크립터를 찾고, 발견되면 인스턴스 딕셔너리에 있는
   어트리뷰트를 설정하거나 삭제하는 것보다 우선합니다. 그렇지 않으면,
   객체의 (있다면) "__dict__"에서 어트리뷰트가 설정되거나 삭제됩니다.
   성공하면 "0"이 반환되고, 그렇지 않으면 "AttributeError"가 발생하고
   "-1"이 반환됩니다.

int PyObject_DelAttr(PyObject *o, PyObject *attr_name)

   객체 *o*에 대해, *attr_name*이라는 이름의 어트리뷰트를 삭제합니다.
   실패 시 "-1"을 반환합니다. 이것은 파이썬 문장 "del o.attr_name"과
   동등합니다.

int PyObject_DelAttrString(PyObject *o, const char *attr_name)

   객체 *o*에 대해, *attr_name*이라는 이름의 어트리뷰트를 삭제합니다.
   실패 시 "-1"을 반환합니다. 이것은 파이썬 문장 "del o.attr_name"과
   동등합니다.

PyObject* PyObject_GenericGetDict(PyObject *o, void *context)
    *Return value: New reference.*

   "__dict__" 디스크립터의 게터(getter)를 위한 일반적인 구현. 필요하면
   딕셔너리를 만듭니다.

   버전 3.3에 추가.

int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)

   "__dict__" 디스크립터의 세터(setter)를 위한 일반적인 구현. 이 구현
   은 딕셔너리 삭제를 허락하지 않습니다.

   버전 3.3에 추가.

PyObject* PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)
    *Return value: New reference.*

   *opid*에 의해 지정된 연산을 사용하여 *o1*과 *o2*의 값을 비교합니다.
   *opid*는 "Py_LT", "Py_LE", "Py_EQ", "Py_NE", "Py_GT" 또는 "Py_GE"
   중 하나여야 하고 각각 "<", "<=", "==", "!=", ">" 또는 ">="에 해당합
   니다. 이는 파이썬 표현식 "o1 op o2"와 동등합니다. 여기서 "op"는
   *opid*에 해당하는 연산자입니다. 성공 시 비교 값을, 실패 시 "NULL"을
   반환합니다.

int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)

   *opid*에 의해 지정된 연산을 사용하여 *o1*과 *o2*의 값을 비교합니다.
   *opid*는 "Py_LT", "Py_LE", "Py_EQ", "Py_NE", "Py_GT" 또는 "Py_GE"
   중 하나여야 하고 각각 "<", "<=", "==", "!=", ">" 또는 ">="에 해당합
   니다. 에러 시 "-1"을, 결과가 거짓이면 "0"을, 그렇지 않으면 "1"을 반
   환합니다. 이는 파이썬 표현식 "o1 op o2"와 동등합니다. 여기서 "op"는
   *opid*에 해당하는 연산자입니다.

참고:

  *o1*과 *o2*가 같은 객체이면, "PyObject_RichCompareBool()" 은 항상
  "Py_EQ"의 경우는 "1"을, "Py_NE"의 경우는 "0"을 반환합니다.

PyObject* PyObject_Repr(PyObject *o)
    *Return value: New reference.*

   객체 *o*의 문자열 표현을 계산합니다. 성공하면 문자열 표현을, 실패하
   면 "NULL"을 반환합니다. 이것은 파이썬 표현식 "repr(o)"와 동등합니다
   . "repr()" 내장 함수에 의해 호출됩니다.

   버전 3.4에서 변경: 이 함수에는 이제 디버그 어서션이 포함되어 있어
   활성 예외를 조용히 버리지 않도록 합니다.

PyObject* PyObject_ASCII(PyObject *o)
    *Return value: New reference.*

   "PyObject_Repr()"처럼, 객체 *o*의 문자열 표현을 계산하지만, "\x",
   "\u" 또는 "\U" 이스케이프를 사용하여 "PyObject_Repr()"이 반환한 문
   자열에서 비 ASCII 문자를 이스케이프 합니다. 이것은 파이썬 2에서
   "PyObject_Repr()"에 의해 반환된 것과 유사한 문자열을 생성합니다.
   "ascii()" 내장 함수에 의해 호출됩니다.

PyObject* PyObject_Str(PyObject *o)
    *Return value: New reference.*

   객체 *o*의 문자열 표현을 계산합니다. 성공 시 문자열 표현을, 실패 시
   "NULL"을 반환합니다. 이것은 파이썬 표현식 "str(o)"와 동등합니다.
   "str()" 내장 함수에 의해, 따라서 "print()" 함수에 의해서도 호출됩니
   다.

   버전 3.4에서 변경: 이 함수에는 이제 디버그 어서션이 포함되어 있어
   활성 예외를 조용히 버리지 않도록 합니다.

PyObject* PyObject_Bytes(PyObject *o)
    *Return value: New reference.*

   객체 *o*의 바이트열 표현을 계산합니다. 실패하면 "NULL"을, 성공하면
   바이트열 객체를 반환됩니다. 이는 *o*가 정수가 아닐 때 파이썬 표현식
   "bytes(o)"와 동등합니다. "bytes(o)"와 달리, *o*가 정수이면 0으로 초
   기화된 바이트열 객체 대신 TypeError가 발생합니다.

int PyObject_IsSubclass(PyObject *derived, PyObject *cls)

   클래스 *derived*가 클래스 *cls*와 동일하거나 *cls*에서 파생되었으면
   "1"을 반환하고, 그렇지 않으면 "0"을 반환합니다. 에러가 발생하면
   "-1"을 반환합니다.

   *cls*가 튜플이면, *cls*의 모든 항목에 대해 검사가 수행됩니다. 적어
   도 하나의 검사에서 "1"을 반환하면 결과는 "1"이 되고, 그렇지 않으면
   "0"이 됩니다.

   *cls*에 "__subclasscheck__()" 메서드가 있으면, **PEP 3119**에 설명
   된 대로 서브 클래스 상태를 판별하기 위해 호출됩니다. 그렇지 않으면,
   *derived*가 직접 또는 간접 서브 클래스일 때 *cls*의 서브 클래스입니
   다, 즉 "cls.__mro__"에 포함되어 있습니다.

   일반적으로 클래스 객체(즉 "type"이나 파생 클래스의 인스턴스)만 클래
   스로 간주합니다. 그러나, 객체는 "__bases__" 어트리뷰트(베이스 클래
   스의 튜플이어야 합니다)를 가짐으로써 이를 재정의할 수 있습니다.

int PyObject_IsInstance(PyObject *inst, PyObject *cls)

   *inst*가 *cls* 클래스나 *cls*의 서브 클래스의 인스턴스이면 "1"을 반
   환하고, 그렇지 않으면 "0"을 반환합니다. 에러가 발생하면 "-1"을 반환
   하고 예외를 설정합니다.

   *cls*가 튜플이면, *cls*의 모든 항목에 대해 검사가 수행됩니다. 적어
   도 하나의 검사에서 "1"을 반환하면 결과는 "1"이 되고, 그렇지 않으면
   "0"이 됩니다.

   *cls*에 "__instancecheck__()" 메서드가 있으면, **PEP 3119**에 설명
   된 대로 서브 클래스 상태를 판별하기 위해 호출됩니다. 그렇지 않으면,
   *inst*는 해당 클래스가 *cls*의 서브 클래스일 때 *cls*의 인스턴스입
   니다.

   인스턴스 *inst*는 "__class__" 어트리뷰트를 가짐으로써 클래스로 간주
   하는 것을 재정의할 수 있습니다.

   객체 *cls*는 "__bases__" 어트리뷰트(베이스 클래스의 튜플이어야 합니
   다)를 가짐으로써, 클래스로 간주하는지와 베이스 클래스가 무엇인지를
   재정의할 수 있습니다.

int PyCallable_Check(PyObject *o)

   객체 *o*가 콜러블인지 판별합니다. 객체가 콜러블이면 "1"을, 그렇지
   않으면 "0"을 반환합니다. 이 함수는 항상 성공합니다.

PyObject* PyObject_Call(PyObject *callable, PyObject *args, PyObject *kwargs)
    *Return value: New reference.*

   튜플 *args*로 제공된 인자와 딕셔너리 *kwargs*로 제공된 이름있는 인
   자로 콜러블 파이썬 객체 *callable*을 호출합니다.

   *args*는 "NULL"이 아니어야 합니다, 인자가 필요하지 않으면 빈 튜플을
   사용하십시오. 이름있는 인자가 필요하지 않으면, *kwargs*는 "NULL"일
   수 있습니다.

   성공하면 호출 결과를 반환하고, 실패하면 예외를 발생시키고 "NULL"을
   반환합니다.

   이것은 파이썬 표현식 "callable(*args, **kwargs)"와 동등합니다.

PyObject* PyObject_CallObject(PyObject *callable, PyObject *args)
    *Return value: New reference.*

   튜플 *args*로 제공된 인자로 콜러블 파이썬 객체 *callable*을 호출합
   니다. 인자가 필요하지 않으면, *args*는 "NULL"일 수 있습니다.

   성공하면 호출 결과를 반환하고, 실패하면 예외를 발생시키고 "NULL"을
   반환합니다.

   이것은 파이썬 표현식 "callable(*args)"와 동등합니다.

PyObject* PyObject_CallFunction(PyObject *callable, const char *format, ...)
    *Return value: New reference.*

   가변 개수의 C 인자로 콜러블 파이썬 객체 *callable*을 호출합니다. C
   인자는 "Py_BuildValue()" 스타일 포맷 문자열을 사용하여 기술됩니다.
   format은 "NULL"일 수 있으며, 인자가 제공되지 않았음을 나타냅니다.

   성공하면 호출 결과를 반환하고, 실패하면 예외를 발생시키고 "NULL"을
   반환합니다.

   이것은 파이썬 표현식 "callable(*args)"와 동등합니다.

   Note that if you only pass "PyObject *" args,
   "PyObject_CallFunctionObjArgs()" is a faster alternative.

   버전 3.4에서 변경: *format*의 형이 "char *"에서 변경되었습니다.

PyObject* PyObject_CallMethod(PyObject *obj, const char *name, const char *format, ...)
    *Return value: New reference.*

   가변 개수의 C 인자로 객체 *obj*의 *name*이라는 메서드를 호출합니다.
   C 인자는 튜플을 생성해야 하는 "Py_BuildValue()" 포맷 문자열로 기술
   됩니다.

   format은 "NULL"일 수 있으며, 인자가 제공되지 않았음을 나타냅니다.

   성공하면 호출 결과를 반환하고, 실패하면 예외를 발생시키고 "NULL"을
   반환합니다.

   이것은 파이썬 표현식 "obj.name(arg1, arg2, ...)"와 동등합니다.

   Note that if you only pass "PyObject *" args,
   "PyObject_CallMethodObjArgs()" is a faster alternative.

   버전 3.4에서 변경: *name*과 *format*의 형이 "char *"에서 변경되었습
   니다.

PyObject* PyObject_CallFunctionObjArgs(PyObject *callable, ...)
    *Return value: New reference.*

   Call a callable Python object *callable*, with a variable number of
   "PyObject*" arguments.  The arguments are provided as a variable
   number of parameters followed by "NULL".

   성공하면 호출 결과를 반환하고, 실패하면 예외를 발생시키고 "NULL"을
   반환합니다.

   이것은 파이썬 표현식 "callable(arg1, arg2, ...)"와 동등합니다.

PyObject* PyObject_CallMethodObjArgs(PyObject *obj, PyObject *name, ...)
    *Return value: New reference.*

   Calls a method of the Python object *obj*, where the name of the
   method is given as a Python string object in *name*.  It is called
   with a variable number of "PyObject*" arguments.  The arguments are
   provided as a variable number of parameters followed by "NULL".

   성공하면 호출 결과를 반환하고, 실패하면 예외를 발생시키고 "NULL"을
   반환합니다.

PyObject* _PyObject_Vectorcall(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames)

   가능하면 "벡터콜"을 사용하여, 콜러블 파이썬 객체 *callable*을 호출
   합니다.

   *args*는 위치 인자가 있는 C 배열입니다.

   *nargsf*는 위치 인자의 수와 선택적인 플래그
   "PY_VECTORCALL_ARGUMENTS_OFFSET"입니다 (아래를 참조하십시오). 실제
   인자의 개수를 얻으려면, "PyVectorcall_NARGS(nargsf)"를 사용하십시오
   .

   *kwnames*는 "NULL"(키워드 인자 없음)이나 키워드 이름의 튜플일 수 있
   습니다. 후자의 경우, 키워드 인자의 값은 위치 인자 다음에 *args*에
   저장됩니다. 키워드 인자의 수는 *nargsf*에 영향을 미치지 않습니다.

   *kwnames*는 "str" 형(서브 클래스는 아닙니다)의 객체만 포함해야 하며
   , 모든 키는 고유해야 합니다.

   성공하면 호출 결과를 반환하고, 실패하면 예외를 발생시키고 "NULL"을
   반환합니다.

   callable이 지원한다면 벡터콜 프로토콜을 사용합니다; 그렇지 않으면,
   인자는 "tp_call"을 사용하도록 변환됩니다.

   참고:

     이 함수는 잠정적이며 파이썬 3.9에서 다른 이름으로 변경되고 어쩌면
     의미도 변경되어 공개될 예정입니다. 이 함수를 사용한다면, 파이썬
     3.9를 위해 코드를 변경할 준비를 하십시오.

   버전 3.8에 추가.

PY_VECTORCALL_ARGUMENTS_OFFSET

   벡터콜 *nargsf* 인자에 설정되면, 피호출자는 일시적으로 "args[-1]"을
   변경할 수 있습니다. 즉, *args*는 할당된 벡터에서 인자 1(0이 아닙니
   다)을 가리킵니다. 피호출자는 반환하기 전에 "args[-1]" 값을 복원해야
   합니다.

   (추가 할당 없이) 저렴하게 할 수 있을 때마다, 호출자는
   "PY_VECTORCALL_ARGUMENTS_OFFSET"을 사용하는 것이 좋습니다. 이렇게
   하면 연결된 메서드와 같은 콜러블 항목이 선행 호출(*self* 인자를 앞
   에 붙이는 것을 포함합니다)을 저렴하게 만들 수 있습니다.

   버전 3.8에 추가.

Py_ssize_t PyVectorcall_NARGS(size_t nargsf)

   주어진 벡터콜 *nargsf* 인자에서 실제 인자 수를 반환합니다. 현재
   "nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSET"과 동등합니다.

   버전 3.8에 추가.

PyObject* _PyObject_FastCallDict(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwdict)

   키워드 인자가 *kwdict* 딕셔너리로 전달된다는 점을 제외하고는
   "_PyObject_Vectorcall()"과 같습니다. 키워드 인자가 없으면 *kwdict*
   는 "NULL"일 수 있습니다.

   "벡터콜"을 지원하는 콜러블의 경우, 인자는 내부적으로 벡터콜 규칙으
   로 변환됩니다. 따라서, 이 함수는 "_PyObject_Vectorcall()"에 비해 약
   간의 오버헤드를 추가합니다. 호출자에게 이미 사용할 준비가 된 딕셔너
   리가 있을 때만 사용해야 합니다.

   참고:

     이 함수는 잠정적이며 파이썬 3.9에서 다른 이름으로 변경되고 어쩌면
     의미도 변경되어 공개될 예정입니다. 이 함수를 사용한다면, 파이썬
     3.9를 위해 코드를 변경할 준비를 하십시오.

   버전 3.8에 추가.

Py_hash_t PyObject_Hash(PyObject *o)

   객체 *o*의 해시값을 계산하고 반환합니다. 실패하면 "-1"을 반환합니다
   . 이것은 파이썬 표현식 "hash(o)"와 동등합니다.

   버전 3.2에서 변경: 반환형은 이제 Py_hash_t입니다. 이것은 Py_ssize_t
   와 같은 크기의 부호 있는 정수입니다.

Py_hash_t PyObject_HashNotImplemented(PyObject *o)

   "type(o)"가 해시 가능하지 않음을 나타내는 "TypeError"를 설정하고
   "-1"을 반환합니다. 이 함수는 "tp_hash" 슬롯에 저장될 때 특수한 처방
   을 받아서, 인터프리터에 형이 해시 가능하지 않음을 명시적으로 알립니
   다.

int PyObject_IsTrue(PyObject *o)

   객체 *o*를 참으로 간주하면 "1"을, 그렇지 않으면 "0"을 반환합니다.
   이것은 파이썬 표현식 "not not o"와 동등합니다. 실패하면 "-1"을 반환
   합니다.

int PyObject_Not(PyObject *o)

   객체 *o*를 참으로 간주하면 "0"을, 그렇지 않으면 "1"을 반환합니다.
   이것은 파이썬 표현식 "not o"와 동등합니다. 실패하면 "-1"을 반환합니
   다.

PyObject* PyObject_Type(PyObject *o)
    *Return value: New reference.*

   *o*가 "NULL"이 아니면, 객체 *o*의 객체 형에 해당하는 형 객체를 반환
   합니다. 실패하면 "SystemError"를 발생시키고 "NULL"을 반환합니다. 이
   것은 파이썬 표현식 "type(o)"와 동등합니다. 이 함수는 반환 값의 참조
   횟수를 증가시킵니다. 증가한 참조 횟수가 필요할 때를 제외하고,
   "PyTypeObject*" 형의 포인터를 반환하는 공통 표현식 "o->ob_type" 대
   신 이 함수를 사용할 이유가 없습니다.

int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)

   객체 *o*가 *type* 형이거나 *type*의 서브 형이면 참을 반환합니다. 두
   매개 변수 모두 "NULL"이 아니어야 합니다.

Py_ssize_t PyObject_Size(PyObject *o)
Py_ssize_t PyObject_Length(PyObject *o)

   객체 *o*의 길이를 반환합니다. 객체 *o*가 시퀀스와 매핑 프로토콜을
   제공하면, 시퀀스 길이가 반환됩니다. 에러가 발생하면 "-1"이 반환됩니
   다. 이것은 파이썬 표현식 "len(o)"와 동등합니다.

Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t default)

   *o* 객체의 추정된 길이를 반환합니다. 먼저 실제 길이를 반환하려고 시
   도한 다음, "__length_hint__()"를 사용하여 추정값을 반환하고, 마지막
   으로 기본값을 반환합니다. 에러 시 "-1"을 반환합니다. 이것은 파이썬
   표현식 "operator.length_hint(o, default)"와 동등합니다.

   버전 3.4에 추가.

PyObject* PyObject_GetItem(PyObject *o, PyObject *key)
    *Return value: New reference.*

   객체 *key*에 해당하는 *o*의 요소를 반환하거나 실패 시 "NULL"을 반환
   합니다. 이것은 파이썬 표현식 "o[key]"와 동등합니다.

int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)

   객체 *key*를 값 *v*에 매핑합니다. 실패 시 예외를 발생시키고 "-1"을
   반환합니다; 성공하면 "0"을 반환합니다. 이것은 파이썬 문장 "o[key] =
   v"와 동등합니다. 이 함수는 *v*에 대한 참조를 훔치지 *않습니다*.

int PyObject_DelItem(PyObject *o, PyObject *key)

   객체 *o*에서 객체 *key*에 대한 매핑을 제거합니다. 실패하면 "-1"을
   반환합니다. 이것은 파이썬 문장 "del o[key]"와 동등합니다.

PyObject* PyObject_Dir(PyObject *o)
    *Return value: New reference.*

   이것은 파이썬 표현식 "dir(o)"와 동등하며, 객체 인자에 적합한 문자열
   의 (비어있을 수 있는) 리스트를 반환하거나, 에러가 있으면 "NULL"을
   반환합니다. 인자가 "NULL"이면, 파이썬 "dir()"과 비슷하며, 현재 지역
   (locals)의 이름들을 반환합니다; 이 경우, 실행 프레임이 활성화되어
   있지 않으면 "NULL"이 반환되지만 "PyErr_Occurred()"는 거짓을 반환합
   니다.

PyObject* PyObject_GetIter(PyObject *o)
    *Return value: New reference.*

   이것은 파이썬 표현식 "iter(o)"와 동등합니다. 객체 인자에 대한 새로
   운 이터레이터를 반환하거나, 객체가 이미 이터레이터이면 객체 자체를
   반환합니다. 객체를 이터레이트 할 수 없으면 "TypeError"를 발생시키고
   "NULL"을 반환합니다.
