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.

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

멤버 디스크립터는 타입의 C 구조체에 있는 필드들을 파이썬 어트리뷰트로 노출합니다. 이는 tp_members 항목을 위해 생성된 것과 동일한 종류의 디스크립터이며, 파이썬에서는 types.MemberDescriptorType 객체로 나타납니다.

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

PyTypeObject PyMemberDescr_Type
…의 일부 안정 ABI.

PyMemberDef 구조체로부터 생성된 멤버 디스크립터 객체의 타입입니다. 이 디스크립터들은 C 구조체의 필드들을 타입의 어트리뷰스로 노출하며, 파이썬에서 types.MemberDescriptorType 객체에 해당합니다.

PyTypeObject PyGetSetDescr_Type
…의 일부 안정 ABI.

PyGetSetDef 구조체로부터 생성된 get/set 디스크립터 객체의 타입입니다. 이 디스크립터들은 C getter 및 setter 함수에 의해 값이 계산되는 어트리뷰트를 구현하며, 많은 내장 타입 어트리뷰트에 사용됩니다. 이들은 파이썬에서 types.GetSetDescriptorType 객체에 해당합니다.

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

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

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

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

PyTypeObject PyMethodDescr_Type
…의 일부 안정 ABI.

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

struct wrapperbase

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() 에 의해 생성된 래퍼 디스크립터 객체의 형(type) 객체입니다. 래퍼 디스크립터는 내부적으로 래퍼 구조를 통해 구현된 특수 메서드를 노출하는 데 사용되며, 파이썬에서는 types.WrapperDescriptorType 객체로 나타납니다.

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

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

클래스 메서드 디스크립터는 접근 시 인스턴스가 아닌 클래스를 전달받는 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 로부터 새로운 바운드(bound) 래퍼 객체를 생성합니다.

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

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

PyDescr_COMMON

이것은 디스크립터 객체를 위한 공통 필드들을 포함하는 매크로입니다.

이것은 Python의 C API에 실수로 포함된 것이므로 확장 모듈에서 사용하지 마십시오. 커스텀 디스크립터 객체를 생성하려면 디스크립터 프로토콜(tp_descr_gettp_descr_set)을 구현하는 클래스를 만드십시오.

내장 디스크립터

PyTypeObject PyProperty_Type
…의 일부 안정 ABI.

프라퍼티(property) 객체의 형(type) 객체입니다. 파이썬 계층의 property 와 동일한 객체입니다.

PyTypeObject PySuper_Type
…의 일부 안정 ABI.

슈퍼(super) 객체의 형(type) 객체입니다. 파이썬 계층의 super 와 동일한 객체입니다.

PyTypeObject PyClassMethod_Type

클래스 메서드 객체의 형(type)입니다. 파이썬 계층의 classmethod 와 동일한 객체입니다.

PyTypeObject PyClassMethodDescr_Type
…의 일부 안정 ABI.

C 수준의 클래스 메서드 디스크립터 객체를 위한 형(type) 객체입니다. 이는 C 확장 타입에서 정의된 classmethod() 를 위해 생성된 디스크립터의 형이며, 파이썬의 types.ClassMethodDescriptorType 객체에 대응합니다.

PyObject *PyClassMethod_New(PyObject *callable)

callable 을 래핑하는 새로운 classmethod 객체를 생성합니다. callable 은 호출 가능한(callable) 객체여야 하며 NULL 이 아니어야 합니다.

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

PyTypeObject PyStaticMethod_Type

스태틱 메서드(static method) 객체의 형(type)입니다. 파이썬 계층의 staticmethod 와 동일한 객체입니다.

PyObject *PyStaticMethod_New(PyObject *callable)

callable 을 래핑하는 새로운 staticmethod 객체를 생성합니다. callable 은 호출 가능한(callable) 객체여야 하며 NULL 이 아니어야 합니다.

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