Python

디스크립터 객체

“디스크립터”는 객체의 일부 어트리뷰트를 기술하는 객체입니다. 그것들은 형 객체의 딕셔너리에 있습니다.

PyObject *PyDescr_NewGetSet(PyTypeObject *type, struct PyGetSetDef *getset)
반환값: 새 참조. 상의 안정 ABI.

PyGetSetDef 구조체 getset 으로부터 확장 유형 type 에 대한 새로운 get-set 데스크립터를 만듭니다.

Get-set 디스크립터는 인스턴스에 직접 저장되는 것이 아니라 C getter 및 setter 함수에 의해 구현된 속성을 노출합니다. 이는 tp_getset 에 있는 항목에 대해 생성된 것과 동일한 유형의 디스크립터이며, 파이썬에서는 types.GetSetDescriptorType 객체로 나타납니다.

성공하면 디스크립터에 대한 강한 참조\를 반환합니다. 실패 시 예외를 설정하고 NULL\을 반환합니다.

PyObject *PyDescr_NewMember(PyTypeObject *type, struct PyMemberDef *member)
반환값: 새 참조. 상의 안정 ABI.

확장 타입 type 을 위한 새 멤버 디스크립터를 PyMemberDef 구조체 member 로부터 생성합니다.

멤버 디스크립터는 타입의 C 구조체 필드를 파이썬 속성으로 노출합니다. 이는 tp_members 의 항목에 대해 생성된 것과 같은 종류의 디스크립터이며, 파이썬에서는 types.MemberDescriptorType 객체로 나타납니다.

성공하면 디스크립터에 대한 강한 참조\를 반환합니다. 실패 시 예외를 설정하고 NULL\을 반환합니다.

PyTypeObject PyMemberDescr_Type
상의 안정 ABI.

PyMemberDef 구조체로부터 생성된 멤버 디스크립터 객체에 대한 타입 객체입니다. 이 디스크립터는 C 구조체의 필드를 타입의 속성으로 노출하며, 파이썬의 types.MemberDescriptorType 객체에 해당합니다.

PyTypeObject PyGetSetDescr_Type
상의 안정 ABI.

PyGetSetDef 구조체로부터 생성된 get/set 디스크립터 객체에 대한 타입 객체입니다. 이 디스크립터는 C 게터 및 세터 함수에 의해 값이 계산되는 속성을 구현하며, 많은 내장 타입 속성에 사용됩니다. 파이썬의 types.GetSetDescriptorType 객체와 해당합니다.

PyObject *PyDescr_NewMethod(PyTypeObject *type, struct PyMethodDef *meth)
반환값: 새 참조. 상의 안정 ABI.

확장 타입 type 을 위한 새 메서드 디스크립터를 PyMethodDef 구조체 meth 로부터 생성합니다.

메서드 디스크립터는 C 함수를 타입의 메서드로 노출합니다. 이는 tp_methods 의 항목에 대해 생성된 것과 같은 종류의 디스크립터이며, 파이썬에서는 types.MethodDescriptorType 객체로 나타납니다.

성공하면 디스크립터에 대한 강한 참조\를 반환합니다. 실패 시 예외를 설정하고 NULL\을 반환합니다.

PyTypeObject PyMethodDescr_Type
상의 안정 ABI.

PyMethodDef 구조체로부터 생성된 메서드 디스크립터 객체에 대한 타입 객체입니다. 이 디스크립터는 C 함수를 타입의 메서드로 노출하며, 파이썬의 types.MethodDescriptorType 객체에 해당합니다.

struct wrapperbase

:c:func:`PyDescr_NewWrapper`가 사용하는 슬롯 래퍼를 설명합니다.

wrapperbase 레코드는 타입 슬롯에 구현된 특수 메서드의 파이썬에서 보이는 이름과 메타데이터를 저장하며, 해당 슬롯을 파이썬 호출 규약에 맞게 조정하는 래퍼 함수를 함께 저장합니다.

PyObject *PyDescr_NewWrapper(PyTypeObject *type, struct wrapperbase *base, void *wrapped)
반환값: 새 참조.

wrapperbase 구조체 base 와 감싸는 슬롯 함수 포인터 wrapped 로부터 확장 타입 type 을 위한 새로운 래퍼 디스크립터를 생성합니다.

래퍼 디스크립터는 타입 슬롯에 구현된 특수 메서드를 노출합니다. 이는 CPython이 __repr____add__ 와 같은 슬롯 기반 특수 메서드에 대해 생성하는 것과 같은 종류의 디스크립터이며, 파이썬에서는 types.WrapperDescriptorType 객체로 나타납니다.

성공하면 디스크립터에 대한 강한 참조\를 반환합니다. 실패 시 예외를 설정하고 NULL\을 반환합니다.

PyTypeObject PyWrapperDescr_Type
상의 안정 ABI.

PyDescr_NewWrapper()PyWrapper_New() 에 의해 생성된 래퍼 디스크립터 객체에 대한 타입 객체입니다. 래퍼 디스크립터는 래퍼 구조체를 통해 구현된 특수 메서드를 노출하는 데 내부적으로 사용되며, 파이썬에서는 types.WrapperDescriptorType 객체로 나타납니다.

PyObject *PyDescr_NewClassMethod(PyTypeObject *type, PyMethodDef *method)
반환값: 새 참조. 상의 안정 ABI.

확장 타입 type 을 위한 새 클래스 메서드 디스크립터를 PyMethodDef 구조체 method 로부터 생성합니다.

클래스 메서드 디스크립터는 접근 시 인스턴스가 아닌 클래스를 받는 C 메서드를 노출합니다. 이는 tp_methodsMETH_CLASS 항목에 대해 생성된 것과 같은 종류의 디스크립터이며, 파이썬에서는 types.ClassMethodDescriptorType 객체로 나타납니다.

성공하면 디스크립터에 대한 강한 참조\를 반환합니다. 실패 시 예외를 설정하고 NULL\을 반환합니다.

int PyDescr_IsData(PyObject *descr)

디스크립터 객체 descr*가 데이터 속성을 기술하면 0이 아닌 값을 반환하고, 메서드를 기술하면 ``0``\을 반환합니다. *descr\는 디스크립터 객체여야 합니다; 오류 검사는 없습니다.

PyObject *PyWrapper_New(PyObject *d, PyObject *self)
반환값: 새 참조. 상의 안정 ABI.

래퍼 디스크립터 d 와 인스턴스 self 로부터 새 바운드 래퍼 객체를 생성합니다.

PyDescr_NewWrapper() 에 의해 생성된 래퍼 디스크립터의 바운드 형태입니다. CPython은 슬롯 래퍼가 인스턴스를 통해 접근될 때 이 객체들을 생성하며, 파이썬에서는 types.MethodWrapperType 객체로 나타납니다.

성공하면 래퍼 객체에 대한 강한 참조\를 반환합니다. 실패 시 예외를 설정하고 NULL\을 반환합니다.

PyDescr_COMMON

디스크립터 객체의 공통 필드를 포함하는 매크로입니다.

이것은 파이썬의 C API에서 실수로 포함된 것입니다. 확장 모듈에서는 사용하지 마십시오. 사용자 정의 디스크립터 객체를 생성하려면 디스크립터 프로토콜을 구현하는 클래스를 생성하십시오 (tp_descr_gettp_descr_set).

내장 디스크립터

PyTypeObject PyProperty_Type
상의 안정 ABI.

속성 객체에 대한 타입 객체입니다. 이는 파이썬 계층의 :class:`property`와 같은 객체입니다.

PyTypeObject PySuper_Type
상의 안정 ABI.

슈퍼 객체의 타입 객체입니다. 이것은 파이썬 계층의 :class:`super`와 같은 객체입니다.

PyTypeObject PyClassMethod_Type

클래스 메서드 객체의 타입입니다. 이것은 파이썬 계층의 :class:`classmethod`와 같은 객체입니다.

PyTypeObject PyClassMethodDescr_Type
상의 안정 ABI.

C 레벨 클래스 메서드 디스크립터 객체의 타입 객체입니다. 이것은 C 확장 타입에서 정의된 classmethod`에 대해 생성된 디스크립터의 타입이며, 파이썬의 :class:`types.ClassMethodDescriptorType() 객체에 해당합니다.

PyObject *PyClassMethod_New(PyObject *callable)

callable 을 래핑하는 새 classmethod 객체를 생성합니다. callable 은 콜러블 객체여야 하며, NULL 가 아니어야 합니다.

성공하면 새 클래스 메서드 디스크립터에 대한 강한 참조 를 반환합니다. 실패하면 예외가 설정된 NULL 을 반환합니다.

PyTypeObject PyStaticMethod_Type

정적 메서드 객체의 타입입니다. 이것은 파이썬 계층의 :class:`staticmethod`와 같은 객체입니다.

PyObject *PyStaticMethod_New(PyObject *callable)

callable 을 래핑하는 새 staticmethod 객체를 생성합니다. callable 은 콜러블 객체여야 하며, NULL 가 아니어야 합니다.

성공하면 새 정적 메서드 디스크립터에 대한 강한 참조 를 반환합니다. 실패하면 예외가 설정된 NULL 을 반환합니다.