オブジェクトプロトコル—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.9/c-api/object
移動先:案内検索

オブジェクトプロトコル

PyObject *Py_NotImplemented
NotImplementedシングルトン。指定されたタイプの組み合わせに対して操作が実装されていないことを通知するために使用されます。
Py_RETURN_NOTIMPLEMENTED
C関数内から Py_NotImplemented を返すことを適切に処理します(つまり、NotImplementedの参照カウントをインクリメントして返します)。
int PyObject_Print(PyObject *o, FILE *fp, int flags)
オブジェクト o をファイル fp に印刷します。 エラー時に-1を返します。 flags引数は、特定の印刷オプションを有効にするために使用されます。 現在サポートされている唯一のオプションはPy_PRINT_RAWです。 指定した場合、 repr()の代わりに、オブジェクトの str()が書き込まれます。
int PyObject_HasAttr(PyObject *o, PyObject *attr_name)

o の属性が attr_name の場合は、1を返し、それ以外の場合は0を返します。 これは、Python式hasattr(o, attr_name)と同等です。 この関数は常に成功します。

__getattr__()および__getattribute__()メソッドの呼び出し中に発生する例外は抑制されることに注意してください。 エラー報告を取得するには、代わりに PyObject_GetAttr()を使用してください。

int PyObject_HasAttrString(PyObject *o, const char *attr_name)

o の属性が attr_name の場合は、1を返し、それ以外の場合は0を返します。 これは、Python式hasattr(o, attr_name)と同等です。 この関数は常に成功します。

__getattr__()および__getattribute__()メソッドを呼び出して一時文字列オブジェクトを作成しているときに発生する例外は抑制されることに注意してください。 エラー報告を取得するには、代わりに PyObject_GetAttrString()を使用してください。

PyObject *PyObject_GetAttr(PyObject *o, PyObject *attr_name)
オブジェクト o から attr_name という名前の属性を取得します。 成功した場合は属性値を返し、失敗した場合はNULLを返します。 これは、Python式o.attr_nameと同等です。
PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name)
オブジェクト o から attr_name という名前の属性を取得します。 成功した場合は属性値を返し、失敗した場合はNULLを返します。 これは、Python式o.attr_nameと同等です。
PyObject *PyObject_GenericGetAttr(PyObject *o, PyObject *name)
タイプオブジェクトのtp_getattroスロットに配置することを目的としたジェネリック属性ゲッター関数。 オブジェクトのMROのクラスのディクショナリで記述子を検索し、オブジェクトの __ dict __ (存在する場合)の属性を検索します。 記述子の実装で概説されているように、データ記述子はインスタンス属性よりも優先されますが、非データ記述子は優先されません。 それ以外の場合は、 AttributeError が発生します。
int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)

オブジェクト oattr_name という名前の属性の値を値 v に設定します。 例外を発生させ、失敗した場合は-1を返します。 成功すると0を返します。 これは、Pythonステートメントo.attr_name = vと同等です。

vNULLの場合、属性は削除されますが、 PyObject_DelAttr()を使用するため、この機能は非推奨になりました。

int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)

オブジェクト oattr_name という名前の属性の値を値 v に設定します。 例外を発生させ、失敗した場合は-1を返します。 成功すると0を返します。 これは、Pythonステートメントo.attr_name = vと同等です。

vNULLの場合、属性は削除されますが、 PyObject_DelAttrString()を使用するため、この機能は非推奨になりました。

int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)
タイプオブジェクトの tp_setattro スロットに配置することを目的とした汎用属性セッターおよびデリッター関数。 オブジェクトのMRO内のクラスのディクショナリでデータ記述子を検索し、見つかった場合は、インスタンスディクショナリ内の属性の設定または削除よりも優先されます。 それ以外の場合、属性はオブジェクトの __ dict __ (存在する場合)で設定または削除されます。 成功すると、0が返されます。それ以外の場合は、 AttributeError が発生し、-1が返されます。
int PyObject_DelAttr(PyObject *o, PyObject *attr_name)
オブジェクト oattr_name という名前の属性を削除します。 失敗すると-1を返します。 これは、Pythonステートメントdel o.attr_nameと同等です。
int PyObject_DelAttrString(PyObject *o, const char *attr_name)
オブジェクト oattr_name という名前の属性を削除します。 失敗すると-1を返します。 これは、Pythonステートメントdel o.attr_nameと同等です。
PyObject *PyObject_GenericGetDict(PyObject *o, void *context)

__dict__記述子のゲッターの汎用実装。 必要に応じて辞書を作成します。

バージョン3.3の新機能。

int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)

__dict__記述子のセッターの汎用実装。 この実装では、辞書を削除できません。

バージョン3.3の新機能。

PyObject *PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)
opid で指定された演算を使用して、 o1o2 の値を比較します。これは、Py_LTPy_LEのいずれかである必要があります。 、Py_EQPy_NEPy_GT、またはPy_GE<<===!=>、または>=。 これは、Python式o1 op o2と同等です。ここで、opは、 opid に対応する演算子です。 成功した場合は比較の値を返し、失敗した場合はNULLを返します。
int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)
opid で指定された演算を使用して、 o1o2 の値を比較します。これは、Py_LTPy_LEのいずれかである必要があります。 、Py_EQPy_NEPy_GT、またはPy_GE<<===!=>、または>=。 エラーの場合は-1を返し、結果がfalseの場合は0を返し、それ以外の場合は1を返します。 これは、Python式o1 op o2と同等です。ここで、opは、 opid に対応する演算子です。

ノート

o1o2 が同じオブジェクトの場合、 PyObject_RichCompareBool()は常にPy_EQ0


PyObject *PyObject_Repr(PyObject *o)

オブジェクト o の文字列表現を計算します。 成功した場合は文字列表現を返し、失敗した場合はNULLを返します。 これは、Python式repr(o)と同等です。 repr()組み込み関数によって呼び出されます。

バージョン3.4で変更:この関数には、アクティブな例外をサイレントに破棄しないようにするためのデバッグアサーションが含まれるようになりました。

PyObject *PyObject_ASCII(PyObject *o)

PyObject_Repr()として、オブジェクト o の文字列表現を計算しますが、 PyObject_Repr()によって返される文字列内の非ASCII文字を\x\u、または\Uはエスケープします。 これにより、Python2の PyObject_Repr()によって返される文字列と同様の文字列が生成されます。 ascii()組み込み関数によって呼び出されます。

PyObject *PyObject_Str(PyObject *o)

オブジェクト o の文字列表現を計算します。 成功した場合は文字列表現を返し、失敗した場合はNULLを返します。 これは、Python式str(o)と同等です。 str()組み込み関数によって呼び出されるため、 print()関数によって呼び出されます。

バージョン3.4で変更:この関数には、アクティブな例外をサイレントに破棄しないようにするためのデバッグアサーションが含まれるようになりました。

PyObject *PyObject_Bytes(PyObject *o)
オブジェクト o のバイト表現を計算します。 NULLは失敗時に返され、bytesオブジェクトは成功時に返されます。 これは、 o が整数でない場合、Python式bytes(o)と同等です。 bytes(o)とは異なり、 o がゼロで初期化されたバイトオブジェクトではなく整数の場合、TypeErrorが発生します。
int PyObject_IsSubclass(PyObject *derived, PyObject *cls)

クラス派生がクラス cls と同一であるか、クラス cls から派生している場合は、1を返します。それ以外の場合は、0を返します。 エラーの場合は、-1を返します。

cls がタプルの場合、チェックは cls のすべてのエントリに対して実行されます。 少なくとも1つのチェックが1を返す場合、結果は1になります。それ以外の場合は、0になります。

cls__ subclasscheck __()メソッドがある場合、 PEP 3119 で説明されているように、サブクラスのステータスを判別するために呼び出されます。 それ以外の場合、派生は、直接または間接のサブクラスである場合、 cls のサブクラスです。 cls.__mro__に含まれています。

通常、クラスオブジェクトのみ、つまり type または派生クラスのインスタンスは、クラスと見なされます。 ただし、オブジェクトは__bases__属性(基本クラスのタプルである必要があります)を持つことでこれをオーバーライドできます。

int PyObject_IsInstance(PyObject *inst, PyObject *cls)

inst がクラス cls または cls のサブクラスのインスタンスである場合は、1を返し、そうでない場合は0を返します。 エラーの場合、-1を返し、例外を設定します。

cls がタプルの場合、チェックは cls のすべてのエントリに対して実行されます。 少なくとも1つのチェックが1を返す場合、結果は1になります。それ以外の場合は、0になります。

cls__ instancecheck __()メソッドがある場合、 PEP 3119 で説明されているように、サブクラスのステータスを判別するために呼び出されます。 それ以外の場合、 inst は、そのクラスが cls のサブクラスである場合、 cls のインスタンスです。

インスタンス inst は、__class__属性を持つことにより、そのクラスと見なされるものをオーバーライドできます。

オブジェクト cls は、__bases__属性(基本クラスのタプルである必要があります)を持つことにより、クラスと見なされる場合、およびその基本クラスが何であるかをオーバーライドできます。

Py_hash_t PyObject_Hash(PyObject *o)

オブジェクト o のハッシュ値を計算して返します。 失敗した場合は、-1を返します。 これは、Python式hash(o)と同等です。

バージョン3.2で変更:戻りタイプはPy_hash_tになりました。 これは、Py_ssize_tと同じサイズの符号付き整数です。

Py_hash_t PyObject_HashNotImplemented(PyObject *o)
TypeError を設定して、type(o)がハッシュ可能ではないことを示し、-1を返します。 この関数は、tp_hashスロットに格納されると特別な扱いを受け、型がハッシュ可能ではないことをインタープリターに明示的に示すことができます。
int PyObject_IsTrue(PyObject *o)
オブジェクト o が真であると見なされる場合は1を返し、そうでない場合は0を返します。 これは、Python式not not oと同等です。 失敗した場合は、-1を返します。
int PyObject_Not(PyObject *o)
オブジェクト o が真であると見なされる場合は0を返し、そうでない場合は1を返します。 これは、Python式not oと同等です。 失敗した場合は、-1を返します。
PyObject *PyObject_Type(PyObject *o)
oNULL以外の場合、オブジェクト o のオブジェクトタイプに対応するタイプオブジェクトを返します。 失敗すると、 SystemError を発生させ、NULLを返します。 これは、Python式type(o)と同等です。 この関数は、戻り値の参照カウントをインクリメントします。 増分参照カウントが必要な場合を除いて、タイプ PyTypeObject * のポインターを返す一般的な式o->ob_typeの代わりにこの関数を使用する理由は実際にはありません。
int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)
オブジェクト o がタイプタイプまたはサブタイプタイプの場合はtrueを返します。 両方のパラメーターはNULL以外である必要があります。
Py_ssize_t PyObject_Size(PyObject *o)


Py_ssize_t PyObject_Length(PyObject *o)

オブジェクト o の長さを返します。 オブジェクト o がシーケンスプロトコルとマッピングプロトコルのいずれかを提供する場合、シーケンスの長さが返されます。 エラーの場合、-1が返されます。 これは、Python式len(o)と同等です。
Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)

オブジェクト o の推定長を返します。 最初に実際の長さを返し、次に __ length_hint __()を使用して見積もりを返し、最後にデフォルト値を返します。 エラー時に-1を返します。 これは、Python式operator.length_hint(o, defaultvalue)と同等です。

バージョン3.4の新機能。

PyObject *PyObject_GetItem(PyObject *o, PyObject *key)
失敗した場合、オブジェクトキーまたはNULLに対応する o の要素を返します。 これは、Python式o[key]と同等です。
int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)
オブジェクトキーを値 v にマップします。 例外を発生させ、失敗した場合は-1を返します。 成功すると0を返します。 これは、Pythonステートメントo[key] = vと同等です。 この関数v への参照を盗みません
int PyObject_DelItem(PyObject *o, PyObject *key)
オブジェクトキーのマッピングをオブジェクト o から削除します。 失敗した場合は-1を返します。 これは、Pythonステートメントdel o[key]と同等です。
PyObject *PyObject_Dir(PyObject *o)
これは、Python式dir(o)と同等であり、オブジェクト引数に適した文字列の(空の可能性がある)リストを返します。エラーが発生した場合はNULLを返します。 引数がNULLの場合、これはPython dir()に似ており、現在のローカルの名前を返します。 この場合、アクティブな実行フレームがない場合、NULLが返されますが、 PyErr_Occurred()はfalseを返します。
PyObject *PyObject_GetIter(PyObject *o)
これは、Python式iter(o)と同等です。 オブジェクト引数の新しいイテレータを返します。オブジェクトがすでにイテレータである場合は、オブジェクト自体を返します。 オブジェクトを反復できない場合は、 TypeError を発生させ、NULLを返します。