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

提供:Dev Guides
< PythonPython/docs/3.8/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__属性(基本クラスのタプルである必要があります)を持つことにより、クラスと見なされる場合、およびその基本クラスが何であるかをオーバーライドできます。

int PyCallable_Check(PyObject *o)
オブジェクト o が呼び出し可能かどうかを判別します。 オブジェクトが呼び出し可能である場合は1を返し、そうでない場合は0を返します。 この関数は常に成功します。
PyObject *PyObject_Call(PyObject *callable, PyObject *args, PyObject *kwargs)

タプル args によって与えられた引数と、辞書 kwargs によって与えられた名前付き引数を使用して、呼び出し可能なPythonオブジェクト callable を呼び出します。

argsNULLであってはなりません。引数が必要ない場合は、空のタプルを使用してください。 名前付き引数が必要ない場合、 kwargsNULLにすることができます。

成功した場合は呼び出しの結果を返すか、例外を発生させて失敗した場合はNULLを返します。

これは、Python式callable(*args, **kwargs)と同等です。

PyObject *PyObject_CallObject(PyObject *callable, PyObject *args)

タプル args で引数を指定して、呼び出し可能なPythonオブジェクト callable を呼び出します。 引数が必要ない場合、 argsNULLにすることができます。

成功した場合は呼び出しの結果を返すか、例外を発生させて失敗した場合はNULLを返します。

これは、Python式callable(*args)と同等です。

PyObject *PyObject_CallFunction(PyObject *callable, const char *format, ...)

可変数のC引数を使用して、呼び出し可能なPythonオブジェクト callable を呼び出します。 C引数は、 Py_BuildValue()スタイルのフォーマット文字列を使用して記述されます。 形式はNULLにすることができ、引数が指定されていないことを示します。

成功した場合は呼び出しの結果を返すか、例外を発生させて失敗した場合はNULLを返します。

これは、Python式callable(*args)と同等です。

PyObject * 引数のみを渡す場合は、 PyObject_CallFunctionObjArgs()がより高速な代替手段であることに注意してください。

バージョン3.4で変更: フォーマットのタイプがchar *から変更されました。

PyObject *PyObject_CallMethod(PyObject *obj, const char *name, const char *format, ...)

オブジェクト objname という名前のメソッドを、可変数のC引数を使用して呼び出します。 C引数は、タプルを生成する必要がある Py_BuildValue()形式の文字列によって記述されます。

形式はNULLにすることができ、引数が指定されていないことを示します。

成功した場合は呼び出しの結果を返すか、例外を発生させて失敗した場合はNULLを返します。

これは、Python式obj.name(arg1, arg2, ...)と同等です。

PyObject * 引数のみを渡す場合は、 PyObject_CallMethodObjArgs()がより高速な代替手段であることに注意してください。

バージョン3.4で変更: name および format のタイプがchar *から変更されました。

PyObject *PyObject_CallFunctionObjArgs(PyObject *callable, ...)

可変数の PyObject * 引数を使用して、呼び出し可能なPythonオブジェクト callable を呼び出します。 引数は、NULLが後に続く可変数のパラメーターとして提供されます。

成功した場合は呼び出しの結果を返すか、例外を発生させて失敗した場合はNULLを返します。

これは、Python式callable(arg1, arg2, ...)と同等です。

PyObject *PyObject_CallMethodObjArgs(PyObject *obj, PyObject *name, ...)

Pythonオブジェクト obj のメソッドを呼び出します。ここで、メソッドの名前は name のPython文字列オブジェクトとして指定されます。 これは、可変数の PyObject * 引数で呼び出されます。 引数は、NULLが後に続く可変数のパラメーターとして提供されます。

成功した場合は呼び出しの結果を返すか、例外を発生させて失敗した場合はNULLを返します。

PyObject *_PyObject_Vectorcall(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames)

可能であれば vectorcall を使用して、呼び出し可能なPythonオブジェクト callable を呼び出します。

args は、位置引数を持つC配列です。

nargsf は、位置引数の数に、オプションでフラグPY_VECTORCALL_ARGUMENTS_OFFSETを加えたものです(以下を参照)。 引数の実際の数を取得するには、 PyVectorcall_NARGS(nargsf)を使用します。

kwnames は、NULL(キーワード引数なし)またはキーワード名のタプルのいずれかです。 後者の場合、キーワード引数の値は、位置引数の後に args に格納されます。 キーワード引数の数は nargsf に影響しません。

kwnames には、タイプstrのオブジェクト(サブクラスではない)のみが含まれている必要があり、すべてのキーは一意である必要があります。

成功した場合は呼び出しの結果を返すか、例外を発生させて失敗した場合はNULLを返します。

呼び出し可能オブジェクトがそれをサポートしている場合、これはvectorcallプロトコルを使用します。 それ以外の場合、引数は tp_call を使用するように変換されます。

ノート

この関数は暫定的なものであり、Python 3.9で公開される予定であり、名前が異なり、セマンティクスが変更されている可能性があります。 この関数を使用する場合は、Python3.9のコードを更新することを計画してください。

バージョン3.8の新機能。

PY_VECTORCALL_ARGUMENTS_OFFSET

vectorcall nargsf 引数で設定されている場合、呼び出し先はargs[-1]を一時的に変更できます。 言い換えると、 args は、割り当てられたベクトルの引数1(0ではない)を指します。 呼び出し先は、戻る前にargs[-1]の値を復元する必要があります。

(追加の割り当てなしで)安価に実行できる場合は常に、発信者はPY_VECTORCALL_ARGUMENTS_OFFSETを使用することをお勧めします。 そうすることで、バインドされたメソッドなどの呼び出し可能オブジェクトが、後続の呼び出し(先頭に self 引数を含む)を安価に実行できるようになります。

バージョン3.8の新機能。

Py_ssize_t PyVectorcall_NARGS(size_t nargsf)

vectorcall nargsf 引数が与えられた場合、引数の実際の数を返します。 現在、nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSETと同等です。

バージョン3.8の新機能。

PyObject *_PyObject_FastCallDict(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwdict)

_PyObject_Vectorcall()と同じですが、キーワード引数が kwdict で辞書として渡される点が異なります。 キーワード引数がない場合、これはNULLである可能性があります。

vectorcall をサポートする呼び出し可能オブジェクトの場合、引数は内部でvectorcall規則に変換されます。 したがって、この関数は _PyObject_Vectorcall()と比較してオーバーヘッドを追加します。 呼び出し元がすでに使用可能な辞書を持っている場合にのみ使用する必要があります。

ノート

この関数は暫定的なものであり、Python 3.9で公開される予定であり、名前が異なり、セマンティクスが変更されている可能性があります。 この関数を使用する場合は、Python3.9のコードを更新することを計画してください。

バージョン3.8の新機能。

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 default)

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

バージョン3.4の新機能。

PyObject *PyObject_GetItem(PyObject *o, PyObject *key)
失敗した場合、オブジェクトキーまたはNULLに対応する o の要素を返します。 これは、Python式o[key]と同等です。
int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)
オブジェクト key を値 v にマップします。 例外を発生させ、失敗した場合は-1を返します。 成功すると0を返します。 これは、Pythonステートメントo[key] = vと同等です。 この関数は、 v への参照を盗みません
int PyObject_DelItem(PyObject *o, PyObject *key)
オブジェクト 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を返します。