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

PyObject *Py_NotImplemented

   与えられたオブジェクトとメソッドの引数の型の組み合わせの処理が未実
   装である印として使われる、 "未実装 (NotImplemented)" シングルトン。

Py_RETURN_NOTIMPLEMENTED

   Properly handle returning "Py_NotImplemented" from within a C
   function (that is, create a new *strong reference* to
   NotImplemented and return it).

Py_PRINT_RAW

   Flag to be used with multiple functions that print the object (like
   "PyObject_Print()" and "PyFile_WriteObject()"). If passed, these
   function would use the "str()" of the object instead of the
   "repr()".

int PyObject_Print(PyObject *o, FILE *fp, int flags)

   Print an object *o*, on file *fp*.  Returns "-1" on error.  The
   flags argument is used to enable certain printing options.  The
   only option currently supported is "Py_PRINT_RAW"; if given, the
   "str()" of the object is written instead of the "repr()".

int PyObject_HasAttr(PyObject *o, PyObject *attr_name)
    * 次に属します: Stable ABI.*

   Returns "1" if *o* has the attribute *attr_name*, and "0"
   otherwise.  This is equivalent to the Python expression "hasattr(o,
   attr_name)".  This function always succeeds.

   注釈:

     Exceptions that occur when this calls "__getattr__()" and
     "__getattribute__()" methods are silently ignored. For proper
     error handling, use "PyObject_GetAttr()" instead.

int PyObject_HasAttrString(PyObject *o, const char *attr_name)
    * 次に属します: Stable ABI.*

   This is the same as "PyObject_HasAttr()", but *attr_name* is
   specified as a const char* UTF-8 encoded bytes string, rather than
   a PyObject*.

   注釈:

     Exceptions that occur when this calls "__getattr__()" and
     "__getattribute__()" methods or while creating the temporary
     "str" object are silently ignored. For proper error handling, use
     "PyObject_GetAttrString()" instead.

PyObject *PyObject_GetAttr(PyObject *o, PyObject *attr_name)
    *戻り値: 新しい参照。** 次に属します: Stable ABI.*

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

PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name)
    *戻り値: 新しい参照。** 次に属します: Stable ABI.*

   This is the same as "PyObject_GetAttr()", but *attr_name* is
   specified as a const char* UTF-8 encoded bytes string, rather than
   a PyObject*.

PyObject *PyObject_GenericGetAttr(PyObject *o, PyObject *name)
    *戻り値: 新しい参照。** 次に属します: Stable ABI.*

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

int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)
    * 次に属します: Stable ABI.*

   オブジェクト *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)
    * 次に属します: Stable ABI.*

   This is the same as "PyObject_SetAttr()", but *attr_name* is
   specified as a const char* UTF-8 encoded bytes string, rather than
   a PyObject*.

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

int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)
    * 次に属します: Stable ABI.*

   属性の設定と削除を行う汎用的な関数で、型オブジェクトの
   "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)

   This is the same as "PyObject_DelAttr()", but *attr_name* is
   specified as a const char* UTF-8 encoded bytes string, rather than
   a PyObject*.

PyObject *PyObject_GenericGetDict(PyObject *o, void *context)
    *戻り値: 新しい参照。** 次に属します: Stable ABI (バージョン 3.10
   より).*

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

   This function may also be called to get the "__dict__" of the
   object *o*. Pass "NULL" for *context* when calling it. Since this
   function may need to allocate memory for the dictionary, it may be
   more efficient to call "PyObject_GetAttr()" when accessing an
   attribute on the object.

   On failure, returns "NULL" with an exception set.

   バージョン 3.3 で追加.

int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)
    * 次に属します: Stable ABI (バージョン 3.7 より).*

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

   バージョン 3.3 で追加.

PyObject **_PyObject_GetDictPtr(PyObject *obj)

   Return a pointer to "__dict__" of the object *obj*. If there is no
   "__dict__", return "NULL" without setting an exception.

   This function may need to allocate memory for the dictionary, so it
   may be more efficient to call "PyObject_GetAttr()" when accessing
   an attribute on the object.

PyObject *PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)
    *戻り値: 新しい参照。** 次に属します: Stable ABI.*

   Compare the values of *o1* and *o2* using the operation specified
   by *opid*, which must be one of "Py_LT", "Py_LE", "Py_EQ", "Py_NE",
   "Py_GT", or "Py_GE", corresponding to "<", "<=", "==", "!=", ">",
   or ">=" respectively. This is the equivalent of the Python
   expression "o1 op o2", where "op" is the operator corresponding to
   *opid*. Returns the value of the comparison on success, or "NULL"
   on failure.

int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)
    * 次に属します: Stable ABI.*

   Compare the values of *o1* and *o2* using the operation specified
   by *opid*, like "PyObject_RichCompare()", but returns "-1" on
   error, "0" if the result is false, "1" otherwise.

注釈:

  If *o1* and *o2* are the same object, "PyObject_RichCompareBool()"
  will always return "1" for "Py_EQ" and "0" for "Py_NE".

PyObject *PyObject_Format(PyObject *obj, PyObject *format_spec)
    * 次に属します: Stable ABI.*

   Format *obj* using *format_spec*. This is equivalent to the Python
   expression "format(obj, format_spec)".

   *format_spec* may be "NULL". In this case the call is equivalent to
   "format(obj)". Returns the formatted string on success, "NULL" on
   failure.

PyObject *PyObject_Repr(PyObject *o)
    *戻り値: 新しい参照。** 次に属します: Stable ABI.*

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

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

PyObject *PyObject_ASCII(PyObject *o)
    *戻り値: 新しい参照。** 次に属します: Stable ABI.*

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

PyObject *PyObject_Str(PyObject *o)
    *戻り値: 新しい参照。** 次に属します: Stable ABI.*

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

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

PyObject *PyObject_Bytes(PyObject *o)
    *戻り値: 新しい参照。** 次に属します: Stable ABI.*

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

int PyObject_IsSubclass(PyObject *derived, PyObject *cls)
    * 次に属します: Stable ABI.*

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

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

   *cls* に "__subclasscheck__()" メソッドがある場合は、子クラスの状態
   が **PEP 3119** にある通りかどうかを判定するために呼ばれます。 そう
   でないとき *derived* が *cls* の子クラスになるのは、直接的あるいは
   間接的な子クラスである場合、つまり "cls.__mro__" に含まれる場合です
   。

   Normally only class objects, i.e. instances of "type" or a derived
   class, are considered classes.  However, objects can override this
   by having a "__bases__" attribute (which must be a tuple of base
   classes).

int PyObject_IsInstance(PyObject *inst, PyObject *cls)
    * 次に属します: Stable ABI.*

   *inst* がクラス *cls* もしくは *cls* の子クラスのインスタンスである
   場合に "1" を返し、そうでない場合に "0" を返します。 エラーが起きる
   と "-1" を返し例外を設定します。

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

   *cls* に "__instancecheck__()" メソッドがある場合は、子クラスの状態
   が **PEP 3119** にある通りかどうかを判定するために呼ばれます。 そう
   でないとき *inst* が *cls* のインスタンスになるのは、そのクラスが
   *cls* の子クラスである場合です。

   An instance *inst* can override what is considered its class by
   having a "__class__" attribute.

   An object *cls* can override if it is considered a class, and what
   its base classes are, by having a "__bases__" attribute (which must
   be a tuple of base classes).

Py_hash_t PyObject_Hash(PyObject *o)
    * 次に属します: Stable ABI.*

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

   バージョン 3.2 で変更: 返り値の型が Py_hash_t になりました。この型
   は、 "Py_ssize_t" と同じサイズをもつ符号付き整数です。

Py_hash_t PyObject_HashNotImplemented(PyObject *o)
    * 次に属します: Stable ABI.*

   Set a "TypeError" indicating that "type(o)" is not *hashable* and
   return "-1". This function receives special treatment when stored
   in a "tp_hash" slot, allowing a type to explicitly indicate to the
   interpreter that it is not hashable.

int PyObject_IsTrue(PyObject *o)
    * 次に属します: Stable ABI.*

   *o* が真を表すとみなせる場合には "1" を、そうでないときには "0" を
   返します。   Python の式 "not not o" と同じです。失敗すると "-1" を
   返します。

int PyObject_Not(PyObject *o)
    * 次に属します: Stable ABI.*

   *o* が真を表すとみなせる場合には "0" を、そうでないときには "1" を
   返します。   Python の式 "not o" と同じです。失敗すると "-1" を返し
   ます。

PyObject *PyObject_Type(PyObject *o)
    *戻り値: 新しい参照。** 次に属します: Stable ABI.*

   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 creates a new *strong reference* to 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 a new *strong reference* is needed.

int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)

   Return non-zero if the object *o* is of type *type* or a subtype of
   *type*, and "0" otherwise.  Both parameters must be non-"NULL".

Py_ssize_t PyObject_Size(PyObject *o)
Py_ssize_t PyObject_Length(PyObject *o)
    * 次に属します: Stable ABI.*

   *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)
    *戻り値: 新しい参照。** 次に属します: Stable ABI.*

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

int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)
    * 次に属します: Stable ABI.*

   オブジェクト *key* を値 *v* に対応付けます。 失敗すると、例外を送出
   し "-1" を返します。成功すると "0" を返します。 これは Python の文
   "o[key] = v" と同等です。 この関数は *v* への参照を *盗み取りません
   * 。

int PyObject_DelItem(PyObject *o, PyObject *key)
    * 次に属します: Stable ABI.*

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

PyObject *PyObject_Dir(PyObject *o)
    *戻り値: 新しい参照。** 次に属します: Stable ABI.*

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

PyObject *PyObject_GetIter(PyObject *o)
    *戻り値: 新しい参照。** 次に属します: Stable ABI.*

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

PyObject *PyObject_GetAIter(PyObject *o)
    *戻り値: 新しい参照。** 次に属します: Stable ABI (バージョン 3.10
   より).*

   This is the equivalent to the Python expression "aiter(o)". Takes
   an "AsyncIterable" object and returns an "AsyncIterator" for it.
   This is typically a new iterator but if the argument is an
   "AsyncIterator", this returns itself. Raises "TypeError" and
   returns "NULL" if the object cannot be iterated.

   バージョン 3.10 で追加.
