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

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

オブジェクトプロトコル

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)と同等です。 この関数は常に成功します。
int PyObject_HasAttrString(PyObject *o, const char *attr_name)
o の属性が attr_name の場合は、1を返し、それ以外の場合は0を返します。 これは、Python式hasattr(o, attr_name)と同等です。 この関数は常に成功します。
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_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


int PyObject_Cmp(PyObject *o1, PyObject *o2, int *result)
o1o2 の値を、 o1 が提供するルーチンを使用して比較します。存在する場合は、 o2 が提供するルーチンを使用します。 比較の結果は結果に返されます。 失敗すると-1を返します。 これは、Pythonステートメントresult = cmp(o1, o2)と同等です。
int PyObject_Compare(PyObject *o1, PyObject *o2)
o1o2 の値を、 o1 が提供するルーチンを使用して比較します。存在する場合は、 o2 が提供するルーチンを使用します。 成功した場合の比較の結果を返します。 エラーの場合、返される値は未定義です。 PyErr_Occurred()を使用してエラーを検出します。 これは、Python式cmp(o1, o2)と同等です。
PyObject *PyObject_Repr(PyObject *o)
オブジェクト o の文字列表現を計算します。 成功した場合は文字列表現を返し、失敗した場合は NULL を返します。 これは、Python式repr(o)と同等です。 repr()組み込み関数および逆引用符によって呼び出されます。
PyObject *PyObject_Str(PyObject *o)
オブジェクト o の文字列表現を計算します。 成功した場合は文字列表現を返し、失敗した場合は NULL を返します。 これは、Python式str(o)と同等です。 str()組み込み関数および print ステートメントによって呼び出されます。
PyObject *PyObject_Bytes(PyObject *o)
オブジェクト o のバイト表現を計算します。 2.xでは、これは PyObject_Str()の単なるエイリアスです。
PyObject *PyObject_Unicode(PyObject *o)
オブジェクト o のUnicode文字列表現を計算します。 成功した場合はUnicode文字列表現を返し、失敗した場合は NULL を返します。 これは、Python式unicode(o)と同等です。 unicode()組み込み関数によって呼び出されます。
int PyObject_IsInstance(PyObject *inst, PyObject *cls)

inst がクラス cls または cls のサブクラスのインスタンスである場合は、1を返し、そうでない場合は0を返します。 エラーの場合、-1を返し、例外を設定します。 cls がクラスオブジェクトではなくタイプオブジェクトである場合、 inst がタイプ cls [である場合、 PyObject_IsInstance()1を返します。 X146X]。 cls がタプルの場合、チェックは cls のすべてのエントリに対して実行されます。 少なくとも1つのチェックが1を返す場合、結果は1になります。それ以外の場合は、0になります。 inst がクラスインスタンスではなく、 cls が型オブジェクトでも、クラスオブジェクトでも、タプルでもない場合、 inst には __ class__が必要です。 属性—その属性の値と cls のクラス関係を使用して、この関数の結果を決定します。

バージョン2.1の新機能。

バージョン2.2で変更: 2番目の引数としてのタプルのサポートが追加されました。

サブクラスの決定はかなり簡単な方法で行われますが、クラスシステムの拡張機能の実装者が認識したいしわが含まれています。 ABがクラスオブジェクトである場合、BAから直接または間接的に継承する場合、Aのサブクラスです。 どちらかがクラスオブジェクトでない場合は、より一般的なメカニズムを使用して、2つのオブジェクトのクラス関係を決定します。 BA のサブクラスであるかどうかをテストするとき、 AB である場合、 PyObject_IsSubclass()はtrueを返します。 AB が異なるオブジェクトである場合、 B__ bases __ 属性は深さ優先で Aを検索します。__ bases __ 属性の存在は、この決定に十分であると見なされます。

int PyObject_IsSubclass(PyObject *derived, PyObject *cls)

クラス派生がクラス cls と同一であるか、クラス cls から派生している場合は、1を返します。それ以外の場合は、0を返します。 エラーの場合、-1を返します。 cls がタプルの場合、チェックは cls のすべてのエントリに対して実行されます。 少なくとも1つのチェックが1を返す場合、結果は1になります。それ以外の場合は、0になります。 派生または cls のいずれかが実際のクラスオブジェクト(またはタプル)でない場合、この関数は上記の汎用アルゴリズムを使用します。

バージョン2.1の新機能。

バージョン2.3で変更:古いバージョンのPythonは、2番目の引数としてタプルをサポートしていませんでした。

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

タプル args によって指定された引数と、ディクショナリ kw によって指定された名前付き引数を使用して、呼び出し可能なPythonオブジェクト callable_object を呼び出します。 名前付き引数が必要ない場合、 kwNULL である可能性があります。 argsNULL であってはなりません。引数が必要ない場合は、空のタプルを使用してください。 成功した場合は呼び出しの結果を返し、失敗した場合は NULL を返します。 これは、Python式apply(callable_object, args, kw)またはcallable_object(*args, **kw)と同等です。

バージョン2.2の新機能。

PyObject *PyObject_CallObject(PyObject *callable_object, PyObject *args)
タプル args で引数を指定して、呼び出し可能なPythonオブジェクト callable_object を呼び出します。 引数が必要ない場合、 argsNULL である可能性があります。 成功した場合は呼び出しの結果を返し、失敗した場合は NULL を返します。 これは、Python式apply(callable_object, args)またはcallable_object(*args)と同等です。
PyObject *PyObject_CallFunction(PyObject *callable, char *format, ...)
可変数のC引数を使用して、呼び出し可能なPythonオブジェクト callable を呼び出します。 C引数は、 Py_BuildValue()スタイルのフォーマット文字列を使用して記述されます。 形式は NULL で、引数が指定されていないことを示します。 成功した場合は呼び出しの結果を返し、失敗した場合は NULL を返します。 これは、Python式apply(callable, args)またはcallable(*args)と同等です。 PyObject *引数のみを渡す場合は、PyObject_CallFunctionObjArgs()の方が高速な代替手段であることに注意してください。
PyObject *PyObject_CallMethod(PyObject *o, char *method, char *format, ...)
オブジェクト omethod という名前のメソッドを、可変数のC引数を使用して呼び出します。 C引数は、タプルを生成する必要がある Py_BuildValue()形式の文字列によって記述されます。 形式は NULL で、引数が指定されていないことを示します。 成功した場合は呼び出しの結果を返し、失敗した場合は NULL を返します。 これは、Python式o.method(args)と同等です。 PyObject *引数のみを渡す場合は、PyObject_CallMethodObjArgs()の方が高速な代替手段であることに注意してください。
PyObject* PyObject_CallFunctionObjArgs(PyObject *callable, ..., NULL)

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

バージョン2.2の新機能。

PyObject* PyObject_CallMethodObjArgs(PyObject *o, PyObject *name, ..., NULL)

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

バージョン2.2の新機能。

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

TypeErrorを設定して、type(o)がハッシュ可能ではないことを示し、-1を返します。 この関数は、tp_hashスロットに格納されると特別な扱いを受け、型がハッシュ可能ではないことをインタープリターに明示的に示すことができます。

バージョン2.6の新機能。

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 以外である必要があります。

バージョン2.2の新機能。

Py_ssize_t PyObject_Length(PyObject *o)

Py_ssize_t PyObject_Size(PyObject *o)

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

バージョン2.5で変更:これらの関数はintタイプを返しました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。

PyObject *PyObject_GetItem(PyObject *o, PyObject *key)
失敗した場合、オブジェクト key または NULL に対応する o の要素を返します。 これは、Python式o[key]と同等です。
int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)
オブジェクトキーを値 v にマップします。 例外を発生させ、失敗した場合は-1を返します。 成功すると0を返します。 これは、Pythonステートメントo[key] = vと同等です。
int PyObject_DelItem(PyObject *o, PyObject *key)
キーのマッピングを o から削除します。 失敗すると-1を返します。 これは、Pythonステートメントdel o[key]と同等です。
int PyObject_AsFileDescriptor(PyObject *o)
Pythonオブジェクトからファイル記述子を派生させます。 オブジェクトが整数または長整数の場合、その値が返されます。 そうでない場合は、オブジェクトのfileno()メソッドが存在する場合は呼び出されます。 メソッドは整数または長整数を返す必要があり、ファイル記述子値として返されます。 失敗すると-1を返します。
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 を返します。