デスクリプタオブジェクト (descriptor object)

"デスクリプタ (descriptor)" は、あるオブジェクトのいくつかの属性について記述したオブジェクトです。デスクリプタオブジェクトは型オブジェクトの辞書内にあります。

PyTypeObject PyProperty_Type
次に属します: Stable ABI.

The type object for the built-in descriptor types.

PyObject *PyDescr_NewGetSet(PyTypeObject *type, struct PyGetSetDef *getset)
戻り値: 新しい参照。 次に属します: Stable ABI.

PyGetSetDef 構造体 getset から、拡張型 type 用の新しい get-set デスクリプタを作成します。

get-set デスクリプタは、インスタンスに直接格納される属性ではなく、C のゲッター関数とセッター関数で実装された属性を公開します。 tp_getset のエントリーに対して作られるものと同じ種類のデスクリプタで、Python では types.GetSetDescriptorType オブジェクトとして扱われます。

成功するとデスクリプタへの 強参照 を返します。 失敗すると例外を設定して NULL を返します。

PyObject *PyDescr_NewMember(PyTypeObject *type, struct PyMemberDef *member)
戻り値: 新しい参照。 次に属します: Stable ABI.

PyMemberDef 構造体 member から、拡張型 type 用の新しいメンバーデスクリプタを作成します。

メンバーデスクリプタは、型の C 構造体のフィールドを Python の属性として公開します。 tp_members のエントリーに対して作られるものと同じ種類のデスクリプタで、Python では types.MemberDescriptorType オブジェクトとして扱われます。

成功するとデスクリプタへの 強参照 を返します。 失敗すると例外を設定して NULL を返します。

PyTypeObject PyMemberDescr_Type
次に属します: Stable ABI.

PyMemberDef 構造体から作成されるメンバーデスクリプタオブジェクトの型オブジェクトです。 これらのデスクリプタは C 構造体のフィールドを型の属性として公開し、Python の types.MemberDescriptorType オブジェクトに対応します。

PyTypeObject PyGetSetDescr_Type
次に属します: Stable ABI.

PyGetSetDef 構造体から作成される get/set デスクリプタオブジェクトの型オブジェクトです。 これらのデスクリプタは、値を C のゲッター関数やセッター関数で計算する属性を実装し、多くの組み込み型の属性に使われています。 Python の types.GetSetDescriptorType オブジェクトに対応します。

PyObject *PyDescr_NewMethod(PyTypeObject *type, struct PyMethodDef *meth)
戻り値: 新しい参照。 次に属します: Stable ABI.

PyMethodDef 構造体 meth から、拡張型 type 用の新しいメソッドデスクリプタを作成します。

メソッドデスクリプタは C 関数を型のメソッドとして公開します。 tp_methods のエントリーに対して作られるものと同じ種類のデスクリプタで、Python では types.MethodDescriptorType オブジェクトとして扱われます。

成功するとデスクリプタへの 強参照 を返します。 失敗すると例外を設定して NULL を返します。

PyTypeObject PyMethodDescr_Type
次に属します: Stable ABI.

PyMethodDef 構造体から作成されるメソッドデスクリプタオブジェクトの型オブジェクトです。 これらのデスクリプタは C 関数を型のメソッドとして公開し、Python の types.MethodDescriptorType オブジェクトに対応します。

PyTypeObject PyWrapperDescr_Type
次に属します: Stable ABI.

The type object for wrapper descriptor objects created by PyDescr_NewWrapper() and PyWrapper_New().

Wrapper descriptors are used internally to expose special methods such as __repr__ or __add__, which are implemented by type slots. The type is exposed in Python as types.WrapperDescriptorType.

PyObject *PyDescr_NewWrapper(PyTypeObject *type, struct wrapperbase *base, void *wrapped)
戻り値: 新しい参照。

Create a new wrapper descriptor of type PyWrapperDescr_Type.

This function is meant for internal use only; it and related API (struct wrapperbase and the PyWrapperFlag_KEYWORDS flag) are exposed publicly for backwards compatibility reasons.

See PyCMethod_New() for wrapping a C function.

PyObject *PyDescr_NewClassMethod(PyTypeObject *type, PyMethodDef *method)
戻り値: 新しい参照。 次に属します: Stable ABI.

PyMethodDef 構造体 method から、拡張型 type 用の新しいクラスメソッドデスクリプタを作成します。

クラスメソッドデスクリプタは、アクセスされた際にインスタンスの代わりにクラスを受け取る C メソッドを公開します。 tp_methods の METH_CLASS エントリーに対して作られるものと同じ種類のデスクリプタで、Python では types.ClassMethodDescriptorType オブジェクトとして扱われます。

成功するとデスクリプタへの 強参照 を返します。 失敗すると例外を設定して NULL を返します。

int PyDescr_IsData(PyObject *descr)

デスクリプタオブジェクト descr がデータ属性を表す場合はゼロ以外、メソッドを表す場合は 0 を返します。 descr はデスクリプタオブジェクトでなければなりません。 エラーチェックは行いません。

PyObject *PyWrapper_New(PyObject *d, PyObject *self)
戻り値: 新しい参照。 次に属します: Stable ABI.

ラッパーデスクリプタ d とインスタンス self から、新しい束縛済みラッパーオブジェクトを作成します。

これは PyDescr_NewWrapper() で作成されるラッパーデスクリプタを束縛したものです。 CPython はインスタンスを介してスロットラッパーにアクセスしたときにこのオブジェクトを作成し、Python では types.MethodWrapperType オブジェクトとして扱われます。

成功するとラッパーオブジェクトへの 強参照 を返します。 失敗すると例外を設定して NULL を返します。

PyDescr_TYPE(descr)

Return a borrowed reference to the type that the descriptor descr belongs to. This is accessible as __objclass__ in Python.

descr must be a descriptor object created by one of the PyDescr_New* functions (an instance of PyMethodDescr_Type, PyClassMethodDescr_Type, PyMemberDescr_Type, PyGetSetDescr_Type, or PyWrapperDescr_Type). If the passed descriptor is not an instance of one of these types, the behavior is undefined.

PyDescr_NAME(descr)

Return the name of the descriptor descr as a borrowed reference to a str object. This is available as __name__ in Python.

descr must be a descriptor object created by one of the PyDescr_New* functions. If not, the behavior is undefined.

組み込みデスクリプタ

PyTypeObject PySuper_Type
次に属します: Stable ABI.

super オブジェクトの型オブジェクトです。 Python レベルの super と同じオブジェクトです。

PyTypeObject PyClassMethod_Type

クラスメソッドオブジェクトの型です。 Python レベルの classmethod と同じオブジェクトです。

PyTypeObject PyClassMethodDescr_Type
次に属します: Stable ABI.

The type object for C-level class method descriptor objects. This is the type of the descriptors created for classmethod() defined in C extension types, and corresponds to types.ClassMethodDescriptorType objects in Python.

PyObject *PyClassMethod_New(PyObject *callable)

callable をラップする新しい classmethod オブジェクトを作成します。 callable は呼び出し可能オブジェクトでなければならず、NULL にはできません。

成功すると、新しいクラスメソッドデスクリプタへの 強参照 を返します。 失敗すると例外を設定して NULL を返します。

PyTypeObject PyStaticMethod_Type

静的メソッドオブジェクトの型です。 Python レベルの staticmethod と同じオブジェクトです。

PyObject *PyStaticMethod_New(PyObject *callable)

callable をラップする新しい staticmethod オブジェクトを作成します。 callable は呼び出し可能オブジェクトでなければならず、NULL にはできません。

成功すると、新しい静的メソッドデスクリプタへの 強参照 を返します。 失敗すると例外を設定して NULL を返します。