これは既にサポートされていない古いバージョンの Python のドキュメントです。 是非 Python をアップグレードし、このドキュメントを読みましょう: 現在の安定板リリースの Python ドキュメント.

# オブジェクトプロトコル (object protocol)

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)
  Return value: New reference.

  オブジェクト o から、名前 attr_name の属性を取得します。成功すると属性値を返し失敗すると `NULL` を返します。この関数は Python の式 `o.attr_name` と同じです。

PyObject* `PyObject_GetAttrString`(PyObject *o, const char *attr_name)
  Return value: New reference.

  オブジェクト o から、名前 attr_name の属性を取得します。成功すると属性値を返し失敗すると `NULL` を返します。この関数は Python の式 `o.attr_name` と同じです。

PyObject* `PyObject_GenericGetAttr`(PyObject *o, PyObject *name)
  Return value: New reference.

  型オブジェクトの `tp_getattro` スロットに置かれる、属性を取得する総称的な関数です。この関数は、 (もし存在すれば) オブジェクトの属性 `__dict__` に加え、オブジェクトの MRO にあるクラスの辞書にあるデスクリプタを探します。 デスクリプタ (descriptor) の実装 で概要が述べられている通り、データのデスクリプタはインスタンスの属性より優先され、非データデスクリプタは後回しにされます。見付からなかった場合は `AttributeError` を送出します。

int `PyObject_SetAttr`(PyObject *o, PyObject *attr_name, PyObject *v)

  オブジェクト o の attr_name という名の属性に、値 v を設定します。 失敗すると例外を送出し `-1` を返します; 成功すると `0` を返します。 この関数は Python の式 `o.attr_name = v` と同じです。

  v が `NULL` の場合は属性が削除されますが、この機能は非推奨であり `PyObject_DelAttr()` を使うのが望ましいです。

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

  オブジェクト o の attr_name という名の属性に、値 v を設定します。 失敗すると例外を送出し `-1` を返します; 成功すると `0` を返します。 この関数は Python の式 `o.attr_name = v` と同じです。

  v が `NULL` の場合は属性が削除されますが、この機能は非推奨であり `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)

  オブジェクト o の attr_name という名の属性を削除します。失敗すると `-1` を返します。この関数は Python の文 `del o.attr_name` と同じです。

int `PyObject_DelAttrString`(PyObject *o, const char *attr_name)

  オブジェクト o の attr_name という名の属性を削除します。失敗すると `-1` を返します。この関数は Python の文 `del o.attr_name` と同じです。

PyObject* `PyObject_GenericGetDict`(PyObject *o, void *context)
  Return value: New reference.

  `__dict__` デスクリプタの getter の総称的な実装です。必要な場合は、辞書を作成します。

  バージョン 3.3 で追加.

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

  `__dict__` デスクリプタの setter の総称的な実装です。この実装では辞書を削除することは許されていません。

  バージョン 3.3 で追加.

PyObject* `PyObject_RichCompare`(PyObject *o1, PyObject *o2, int opid)
  Return value: New reference.

  o1 と o2 を opid に指定した演算によって比較します。 opid は `Py_LT`, `Py_LE`, `Py_EQ`, `Py_NE`, `Py_GT`, または `Py_GE`, のいずれかでなければならず、それぞれ `<`, `<=`, `==`, `!=`, `>`, および `>=` に対応します。この関数は Python の式 `o1 op o2` と同じで、 `op` が opid に対応する演算子です。成功すると比較結果の値を返し失敗すると `NULL` を返します。

int `PyObject_RichCompareBool`(PyObject *o1, PyObject *o2, int opid)

  o1 と o2 を opid に指定した演算によって比較します。 opid は `Py_LT`, `Py_LE`, `Py_EQ`, `Py_NE`, `Py_GT`, または `Py_GE`, のいずれかでなければならず、それぞれ `<`, `<=`, `==`, `!=`, `>`, および `>=` に対応します。比較結果が真ならば `1` を、偽ならば `0` を、エラーが発生すると `-1` を返します。この関数は Python の式 `o1 op o2` と同じで、 `op` が opid に対応する演算子です。

注釈

o1 と o2 が同一のオブジェクトである場合、 `PyObject_RichCompareBool()` は `Py_EQ` に対して常に `1` を返し、 `Py_NE` に対して常に `0` を返します。

PyObject* `PyObject_Repr`(PyObject *o)
  Return value: New reference.

  オブジェクト o の文字列表現を計算します。成功すると文字列表現を返し、失敗すると `NULL` を返します。 Python 式 `repr(o)` と同じです。この関数は組み込み関数 `repr()` の処理で呼び出されます。

  バージョン 3.4 で変更: アクティブな例外を黙って捨てないことを保証するのに便利なように、この関数はデバッグアサーションを含むようになりました。

PyObject* `PyObject_ASCII`(PyObject *o)
  Return value: New reference.

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

PyObject* `PyObject_Str`(PyObject *o)
  Return value: New reference.

  オブジェクト o の文字列表現を計算します。成功すると文字列表現を返し、失敗すると `NULL` を返します。 Python 式 `str(o)` と同じです。この関数は組み込み関数 `str()` や、 `print()` 関数の処理で呼び出されます。

  バージョン 3.4 で変更: アクティブな例外を黙って捨てないことを保証するのに便利なように、この関数はデバッグアサーションを含むようになりました。

PyObject* `PyObject_Bytes`(PyObject *o)
  Return value: New reference.

  オブジェクト o のバイト列表現を計算します。失敗すると `NULL` を返し、成功すると bytes オブジェクトを返します。 o が整数でないときの、 Python 式 `bytes(o)` と同じです。 `bytes(o)` と違って、 o が整数のときには、ゼロで初期化された bytes オブジェクトを返すのではなく TypeError が送出されます。

int `PyObject_IsSubclass`(PyObject *derived, PyObject *cls)

  クラス derived がクラス cls と同一であるか、そこから派生したクラスである場合は `1` を返し、そうでない場合は `0` を返します。 エラーが起きた場合は `-1` を返します。

  cls がタプルの場合、 cls の全ての要素に対してチェックします。 少なくとも1つのチェックで `1` が返ったとき、結果は `1` となり、それ以外のとき `0` になります。

  cls に `__subclasscheck__()` メソッドがある場合は、子クラスの状態が PEP 3119 にある通りかどうかを判定するために呼ばれます。 そうでないとき derived が 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)
  Return value: New reference.

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

  args は `NULL` であってはならず、引数を必要としない場合は空のタプルを使ってください。 kwargs は `NULL` でも構いません。

  成功したら呼び出しの結果を返し、失敗したら例外を送出し `NULL` を返します。

  これは次の Python の式と同等です: `callable(*args, **kwargs)` 。

PyObject* `PyObject_CallObject`(PyObject *callable, PyObject *args)
  Return value: New reference.

  呼び出し可能な Python のオブジェクト callable を、タプル args として与えられる引数とともに呼び出します。 引数が不要な場合は、 args は `NULL` で構いません。

  成功したら呼び出しの結果を返し、失敗したら例外を送出し `NULL` を返します。

  これは次の Python の式と同等です: `callable(*args)` 。

PyObject* `PyObject_CallFunction`(PyObject *callable, const char *format, ...)
  Return value: New reference.

  呼び出し可能な Python オブジェクト callable を可変数個の C 引数とともに呼び出します。 C 引数は `Py_BuildValue()` 形式のフォーマット文字列を使って記述します。

  成功したら呼び出しの結果を返し、失敗したら例外を送出し `NULL` を返します。

  これは次の Python の式と同等です: `callable(*args)` 。

  `PyObject *` args だけを引数に渡す場合は、 `PyObject_CallFunctionObjArgs()` がより速い方法であることを覚えておいてください。

  バージョン 3.4 で変更: format の型が `char *` から変更されました。

PyObject* `PyObject_CallMethod`(PyObject *obj, const char *name, const char *format, ...)
  Return value: New reference.

  オブジェクト obj の name という名前のメソッドを、いくつかの C 引数とともに呼び出します。 C 引数はタプルを生成する `Py_BuildValue()` 形式のフォーマット文字列で記述されています。

  format は `NULL` でもよく、引数が与えられないことを表します。

  成功したら呼び出しの結果を返し、失敗したら例外を送出し `NULL` を返します。

  これは次の Python の式と同等です: `obj.name(arg1, arg2, ...)` 。

  `PyObject *` args だけを引数に渡す場合は、 `PyObject_CallMethodObjArgs()` がより速い方法であることを覚えておいてください。

  バージョン 3.4 で変更: name と format の型が `char *` から変更されました。

PyObject* `PyObject_CallFunctionObjArgs`(PyObject *callable, ..., NULL)
  Return value: New reference.

  呼び出し可能な Python オブジェクト callable を可変数個の `PyObject*` 引数とともに呼び出します。引数列は末尾に `NULL` がついた可変数個のパラメタとして与えます。

  成功したら呼び出しの結果を返し、失敗したら例外を送出し `NULL` を返します。

  これは次の Python の式と同等です: `callable(arg1, arg2, ...)` 。

PyObject* `PyObject_CallMethodObjArgs`(PyObject *obj, PyObject *name, ..., NULL)
  Return value: New reference.

  Python オブジェクト obj のメソッドを呼び出します、メソッド名は Python 文字列オブジェクト name で与えます。可変数個の `PyObject*` 引数と共に呼び出されます. 引数列は末尾に `NULL` がついた可変数個のパラメタとして与えます。

  成功したら呼び出しの結果を返し、失敗したら例外を送出し `NULL` を返します。

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)

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

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)
  Return value: New reference.

  o が `NULL` でない場合、オブジェクト o のオブジェクト型に相当する型オブジェクトを返します。失敗すると `SystemError` を送出して `NULL` を返します。 Python の式 `type(o)` と同じです。 この関数は戻り値の参照カウントをインクリメントします。参照カウントのインクリメントが必要でない限り、広く使われていて `PyTypeObject*` 型のポインタを返す表記法 `o->ob_type` の代わりに使う理由は全くありません。

int `PyObject_TypeCheck`(PyObject *o, PyTypeObject *type)

  オブジェクト o が、 type か type のサブタイプであるときに真を返します。どちらのパラメタも `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__()` を使って概算の長さを、そして最後にデフォルトの値を返そうとします。 この関数は Python の式 `operator.length_hint(o, default)` と同じです。

  バージョン 3.4 で追加.

PyObject* `PyObject_GetItem`(PyObject *o, PyObject *key)
  Return value: New reference.

  オブジェクト key に対応する o の要素を返します。失敗すると `NULL` を返します。Python の式 `o[key]` と同じです。

int `PyObject_SetItem`(PyObject *o, PyObject *key, PyObject *v)

  オブジェクト key を値 v に対応付けます。 失敗すると例外を送出し `-1` を返します; 成功すると `0` を返します。 Python の文 `o[key] = v` と同じです。

int `PyObject_DelItem`(PyObject *o, PyObject *key)

  オブジェクト o から key に関する対応付けを削除します。失敗すると `-1` を返します。Python の文 `del o[key]` と同じです。

PyObject* `PyObject_Dir`(PyObject *o)
  Return value: New reference.

  この関数は Python の式 `dir(o)` と同じで、オブジェクトの変数名に割り当てている文字列からなるリスト (空の場合もあります) を返します。エラーの場合には `NULL` を返します。引数を `NULL` にすると、Python における `dir()` と同様に、現在のローカルな名前を返します; この場合、アクティブな実行フレームがなければ `NULL` を返しますが、 `PyErr_Occurred()` は偽を返します。

PyObject* `PyObject_GetIter`(PyObject *o)
  Return value: New reference.

  Python の式 `iter(o)` と同じです。引数にとったオブジェクトに対する新たなイテレータか、オブジェクトがすでにイテレータの場合にはオブジェクト自身を返します。オブジェクトが反復処理不可能であった場合には `TypeError` を送出して `NULL` を返します。