オブジェクトプロトコル (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" を返します。
