オブジェクトプロトコル (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" と同じです。

   If *v* is "NULL", the attribute is deleted. This behaviour is
   deprecated in favour of using "PyObject_DelAttr()", but there are
   currently no plans to remove it.

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

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

   If *v* is "NULL", the attribute is deleted, but this feature is
   deprecated in favour of using "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__" (これは基底クラスのタプルでなければならない) を持たせる
   ことで上書きできます。

Py_hash_t PyObject_Hash(PyObject *o)

   オブジェクト *o* のハッシュ値を計算して返します。失敗すると "-1" を
   返します。 Python の式 "hash(o)" と同じです。

   バージョン 3.2 で変更: The return type is now Py_hash_t.  This is a
   signed integer the same size as "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.*

   When *o* is non-"NULL", returns a type object corresponding to the
   object type of object *o*. On failure, raises "SystemError" and
   returns "NULL".  This is equivalent to the Python expression
   "type(o)". This function increments the reference count of the
   return value. There's really no reason to use this function instead
   of the "Py_TYPE()" function, which returns a pointer of type
   "PyTypeObject*", except when the incremented reference count is
   needed.

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

   オブジェクト *o* の概算の長さを返します。 最初に実際の長さを、次に
   "__length_hint__()" を使って概算の長さを、そして最後にデフォルトの
   値を返そうとします。 この関数は Python の式
   "operator.length_hint(o, defaultvalue)" と同じです。

   バージョン 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" と同等です。 この関数は *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" を返します。
