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

PyObject *Py_NotImplemented

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

Py_RETURN_NOTIMPLEMENTED

   Properly handle returning "Py_NotImplemented" from within a C
   function (that is, create a new *strong reference* to
   NotImplemented and return it).

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)
    * Part of the Stable ABI.*

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

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

int PyObject_HasAttrString(PyObject *o, const char *attr_name)
    * Part of the Stable ABI.*

   *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.** Part of the Stable ABI.*

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

PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name)
    *Return value: New reference.** Part of the Stable ABI.*

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

PyObject *PyObject_GenericGetAttr(PyObject *o, PyObject *name)
    *Return value: New reference.** Part of the Stable ABI.*

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

int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)
    * Part of the Stable ABI.*

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

   If *v* is "NULL", the attribute is deleted. This behaviour is
   deprecated in favour of using "PyObject_DelAttr()", but there are
   currently no plans to remove it.

int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)
    * Part of the Stable ABI.*

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

   If *v* is "NULL", the attribute is deleted, but this feature is
   deprecated in favour of using "PyObject_DelAttrString()".

int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)
    * Part of the Stable ABI.*

   형 객체의 "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.** Part of the Stable ABI since
   version 3.10.*

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

   버전 3.3에 추가.

int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)
    * Part of the Stable ABI since version 3.7.*

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

   버전 3.3에 추가.

PyObject *PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)
    *Return value: New reference.** Part of the Stable ABI.*

   *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)
    * Part of the Stable ABI.*

   *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_Format(PyObject *obj, PyObject *format_spec)
    * Part of the Stable ABI.*

   Format *obj* using *format_spec*. This is equivalent to the Python
   expression "format(obj, format_spec)".

   *format_spec* may be "NULL". In this case the call is equivalent to
   "format(obj)". Returns the formatted string on success, "NULL" on
   failure.

PyObject *PyObject_Repr(PyObject *o)
    *Return value: New reference.** Part of the Stable ABI.*

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

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

PyObject *PyObject_ASCII(PyObject *o)
    *Return value: New reference.** Part of the Stable ABI.*

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

PyObject *PyObject_Str(PyObject *o)
    *Return value: New reference.** Part of the Stable ABI.*

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

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

PyObject *PyObject_Bytes(PyObject *o)
    *Return value: New reference.** Part of the Stable ABI.*

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

int PyObject_IsSubclass(PyObject *derived, PyObject *cls)
    * Part of the Stable ABI.*

   클래스 *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)
    * Part of the Stable ABI.*

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

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

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

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

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

Py_hash_t PyObject_Hash(PyObject *o)
    * Part of the Stable ABI.*

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

   버전 3.2에서 변경: The return type is now Py_hash_t.  This is a
   signed integer the same size as "Py_ssize_t".

Py_hash_t PyObject_HashNotImplemented(PyObject *o)
    * Part of the Stable ABI.*

   Set a "TypeError" indicating that "type(o)" is not *hashable* and
   return "-1". This function receives special treatment when stored
   in a "tp_hash" slot, allowing a type to explicitly indicate to the
   interpreter that it is not hashable.

int PyObject_IsTrue(PyObject *o)
    * Part of the Stable ABI.*

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

int PyObject_Not(PyObject *o)
    * Part of the Stable ABI.*

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

PyObject *PyObject_Type(PyObject *o)
    *Return value: New reference.** Part of the Stable ABI.*

   When *o* is non-"NULL", returns a type object corresponding to the
   object type of object *o*. On failure, raises "SystemError" and
   returns "NULL".  This is equivalent to the Python expression
   "type(o)". This function creates a new *strong reference* to the
   return value. There's really no reason to use this function instead
   of the "Py_TYPE()" function, which returns a pointer of type
   "PyTypeObject*", except when a new *strong reference* is needed.

int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)

   Return non-zero if the object *o* is of type *type* or a subtype of
   *type*, and "0" otherwise.  Both parameters must be non-"NULL".

Py_ssize_t PyObject_Size(PyObject *o)
Py_ssize_t PyObject_Length(PyObject *o)
    * Part of the Stable ABI.*

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

Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)

   Return an estimated length for the object *o*. First try to return
   its actual length, then an estimate using "__length_hint__()", and
   finally return the default value. On error return "-1". This is the
   equivalent to the Python expression "operator.length_hint(o,
   defaultvalue)".

   버전 3.4에 추가.

PyObject *PyObject_GetItem(PyObject *o, PyObject *key)
    *Return value: New reference.** Part of the Stable ABI.*

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

int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)
    * Part of the Stable ABI.*

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

int PyObject_DelItem(PyObject *o, PyObject *key)
    * Part of the Stable ABI.*

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

PyObject *PyObject_Dir(PyObject *o)
    *Return value: New reference.** Part of the Stable ABI.*

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

PyObject *PyObject_GetIter(PyObject *o)
    *Return value: New reference.** Part of the Stable ABI.*

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

PyObject *PyObject_GetAIter(PyObject *o)
    *Return value: New reference.** Part of the Stable ABI since
   version 3.10.*

   This is the equivalent to the Python expression "aiter(o)". Takes
   an "AsyncIterable" object and returns an "AsyncIterator" for it.
   This is typically a new iterator but if the argument is an
   "AsyncIterator", this returns itself. Raises "TypeError" and
   returns "NULL" if the object cannot be iterated.

   버전 3.10에 추가.
