デスクリプタオブジェクト (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()andPyWrapper_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 totypes.ClassMethodDescriptorTypeobjects 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を返します。