객체 프로토콜¶
-
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 byNULL
.성공하면 호출 결과를 반환하고, 실패하면 예외를 발생시키고
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 byNULL
.성공하면 호출 결과를 반환하고, 실패하면 예외를 발생시키고
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()
는 거짓을 반환합니다.