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

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

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().

ラッパーデスクリプタは、型のスロットで実装される __repr__ や __add__ などの特殊メソッドを公開するために内部で使われます。 この型は Python では types.WrapperDescriptorType として公開されています。

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

PyWrapperDescr_Type 型の新しいラッパーデスクリプタを作成します。

この関数は内部での使用のみを想定しています。 この関数と関連 API (struct wrapperbase および PyWrapperFlag_KEYWORDS フラグ) は、後方互換性のために公開されています。

C 関数をラップするには PyCMethod_New() を参照してください。

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)

デスクリプタ descr が属する型への 借用参照 を返します。 Python では __objclass__ からアクセスできます。

descr は PyDescr_New* 関数のいずれかで作成されたデスクリプタオブジェクト (PyMethodDescr_Type、PyClassMethodDescr_Type、PyMemberDescr_Type、PyGetSetDescr_Type、PyWrapperDescr_Type のいずれかのインスタンス) でなければなりません。 渡されたデスクリプタがこれらの型のインスタンスでない場合、動作は未定義です。

PyDescr_NAME(descr)

デスクリプタ descr の名前を str オブジェクトへの 借用参照 として返します。 Python では __name__ からアクセスできます。

descr は PyDescr_New* 関数のいずれかで作成されたデスクリプタオブジェクトでなければなりません。 そうでない場合、動作は未定義です。

PyDescr_COMMON

デスクリプタオブジェクトの共通フィールドを含むマクロです。

これは誤って Python の C API に含められたものです。 拡張モジュールでは使わないでください。 独自のデスクリプタオブジェクトを作成するには、デスクリプタプロトコル (tp_descr_get と tp_descr_set) を実装するクラスを作成してください。

バージョン 3.15 で ソフト非推奨 <Soft deprecated>.

組み込みデスクリプタ

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

プロパティオブジェクトの型オブジェクトです。 Python レベルの property と同じオブジェクトです。

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 を返します。