객체 프로토콜

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)

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

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

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

oattr_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와 동등합니다.

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

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

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

vNULL이면, 어트리뷰트가 삭제되지만, 이 기능은 폐지되었고 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에 의해 지정된 연산을 사용하여 o1o2의 값을 비교합니다. opidPy_LT, Py_LE, Py_EQ, Py_NE, Py_GT 또는 Py_GE 중 하나여야 하고 각각 <, <=, ==, !=, > 또는 >=에 해당합니다. 이는 파이썬 표현식 o1 op o2와 동등합니다. 여기서 opopid에 해당하는 연산자입니다. 성공 시 비교 값을, 실패 시 NULL을 반환합니다.

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

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

참고

o1o2가 같은 객체이면, 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)

instcls 클래스나 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)

객체 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.

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

int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)

객체 otype 형이거나 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을 반환합니다.