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

PyObject *Py_GetConstant(unsigned int constant_id)
    * 次に属します: Stable ABI (バージョン 3.13 より).*

   定数への *強参照* を取得します。

   *constant_id* が無効な場合、例外を設定して "NULL" を返します。

   *constant_id* は次の定数識別子のいずれかでなければなりません。

   +------------------------------------------+-------+---------------------------+
   | 定数識別子                               | 値    | 返されるオブジェクト      |
   |==========================================|=======|===========================|
   | Py_CONSTANT_NONE                         | "0"   | "None"                    |
   +------------------------------------------+-------+---------------------------+
   | Py_CONSTANT_FALSE                        | "1"   | "False"                   |
   +------------------------------------------+-------+---------------------------+
   | Py_CONSTANT_TRUE                         | "2"   | "True"                    |
   +------------------------------------------+-------+---------------------------+
   | Py_CONSTANT_ELLIPSIS                     | "3"   | "Ellipsis"                |
   +------------------------------------------+-------+---------------------------+
   | Py_CONSTANT_NOT_IMPLEMENTED              | "4"   | "NotImplemented"          |
   +------------------------------------------+-------+---------------------------+
   | Py_CONSTANT_ZERO                         | "5"   | "0"                       |
   +------------------------------------------+-------+---------------------------+
   | Py_CONSTANT_ONE                          | "6"   | "1"                       |
   +------------------------------------------+-------+---------------------------+
   | Py_CONSTANT_EMPTY_STR                    | "7"   | "''"                      |
   +------------------------------------------+-------+---------------------------+
   | Py_CONSTANT_EMPTY_BYTES                  | "8"   | "b''"                     |
   +------------------------------------------+-------+---------------------------+
   | Py_CONSTANT_EMPTY_TUPLE                  | "9"   | "()"                      |
   +------------------------------------------+-------+---------------------------+

   数値は、定数識別子を使えないプロジェクトのためにのみ示しています。

   Added in version 3.13.

   CPython では、これらの定数はすべて *不死* です。

PyObject *Py_GetConstantBorrowed(unsigned int constant_id)
    * 次に属します: Stable ABI (バージョン 3.13 より).*

   "Py_GetConstant()" と同様ですが、*借用参照* を返します。

   この関数は主に後方互換性を目的としています。 新しいコードでは
   "Py_GetConstant()" を使うことを推奨します。

   参照はインタープリタから借用され、インタープリタがファイナライズさ
   れるまで有効です。

   Added in version 3.13.

PyObject *Py_NotImplemented

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

Py_RETURN_NOTIMPLEMENTED

   C 関数内から "Py_NotImplemented" を返す処理を適切に行います (つまり
   "NotImplemented" への新しい *強参照* を作成して返します)。

Py_PRINT_RAW

   オブジェクトを出力する複数の関数 ("PyObject_Print()" や
   "PyFile_WriteObject()" など) で使うフラグです。 このフラグを渡すと
   、これらの関数はオブジェクトの "repr()" 結果の代わりに "str()" 結果
   を使います。

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

   オブジェクト *o* をファイル *fp* に出力します。 エラー時は "-1" を
   返します。 "flags" 引数で出力オプションを有効にします。 現在サポー
   トされるオプションは "Py_PRINT_RAW" のみで、指定するとオブジェクト
   の "repr()" 結果の代わりに "str()" 結果を書き出します。

void PyObject_Dump(PyObject *op)

   オブジェクト *op* を "stderr" にダンプします。 デバッグのためにのみ
   使ってください。

   メモリが破損した後でもオブジェクトのダンプを試みられるように、次の
   ように出力します。

   * アクセス時にクラッシュする可能性が最も低いフィールドから順に情報
     を書き出します。

   * この関数は *アタッチされたスレッド状態* がなくても呼び出せますが
     、デッドロックを引き起こす可能性があるため推奨されません。

   * 現在のインタープリタに属さないオブジェクトもダンプできますが、ク
     ラッシュや意図しない動作を引き起こす可能性があります。

   * オブジェクトのメモリが解放済みかどうかを検出するヒューリスティッ
     クを実装しています。 解放済みと判断した場合は、内容を表示せず、メ
     モリアドレスだけを表示します。

   * 出力形式はいつでも変更される可能性があります。

   出力例:

      object address  : 0x7f80124702c0
      object refcount : 2
      object type     : 0x9902e0
      object type name: str
      object repr     : 'abcdef'

   Added in version 3.15.

int PyObject_HasAttrWithError(PyObject *o, PyObject *attr_name)
    * 次に属します: Stable ABI (バージョン 3.13 より).*

   *o* に *attr_name* 属性があれば "1"、なければ "0" を返します。
   Python の式 "hasattr(o, attr_name)" と同等です。 失敗すると "-1" を
   返します。

   Added in version 3.13.

int PyObject_HasAttrStringWithError(PyObject *o, const char *attr_name)
    * 次に属します: Stable ABI (バージョン 3.13 より).*

   "PyObject_HasAttrWithError()" と同じですが、*attr_name* は
   PyObject* ではなく、UTF-8 でエンコードされたバイト文字列を指す
   const char* で指定します。

   Added in version 3.13.

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

   *o* に *attr_name* 属性があれば "1"、なければ "0" を返します。 この
   関数は常に成功します。

   注釈:

     "__getattr__()" メソッドや "__getattribute__()" メソッドの呼び出
     し中に発生した例外は伝播せず、"sys.unraisablehook()" に渡されます
     。 適切にエラーを処理するには、代わりに
     "PyObject_HasAttrWithError()"、"PyObject_GetOptionalAttr()"、
     "PyObject_GetAttr()" を使ってください。

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

   "PyObject_HasAttr()" と同じですが、*attr_name* は PyObject* ではな
   く、UTF-8 でエンコードされたバイト文字列を指す const char* で指定し
   ます。

   注釈:

     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_HasAttrStringWithError()",
     "PyObject_GetOptionalAttrString()" or "PyObject_GetAttrString()"
     instead.

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

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

   属性がない場合を失敗として扱いたくなければ、代わりに
   "PyObject_GetOptionalAttr()" を使えます。

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

   "PyObject_GetAttr()" と同じですが、*attr_name* は PyObject* ではな
   く、UTF-8 でエンコードされたバイト文字列を指す const char* で指定し
   ます。

   属性がない場合を失敗として扱いたくなければ、代わりに
   "PyObject_GetOptionalAttrString()" を使えます。

int PyObject_GetOptionalAttr(PyObject *obj, PyObject *attr_name, PyObject **result);
    * 次に属します: Stable ABI (バージョン 3.13 より).*

   属性が見つからなくても "AttributeError" を送出しない
   "PyObject_GetAttr()" の変種です。

   属性が見つかった場合は "1" を返し、**result* に属性への新しい *強参
   照* を設定します。 属性が見つからない場合は "0" を返し、**result*
   に "NULL" を設定して、"AttributeError" を抑制します。
   "AttributeError" 以外のエラーが発生した場合は "-1" を返し、
   **result* に "NULL" を設定します。

   Added in version 3.13.

int PyObject_GetOptionalAttrString(PyObject *obj, const char *attr_name, PyObject **result);
    * 次に属します: Stable ABI (バージョン 3.13 より).*

   "PyObject_GetOptionalAttr()" と同じですが、*attr_name* は PyObject*
   ではなく、UTF-8 でエンコードされたバイト文字列を指す const char* で
   指定します。

   Added in version 3.13.

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()" のため、非推奨となっていますが、削除される予定
   はありません。

   例外が設定されているときに、*v* を "NULL" にしてこの関数を呼び出し
   てはいけません。 "NULL" チェックを忘れるとこの状態になることがあり
   、属性が削除されてしまいます。

   バージョン 3.15 で変更: 例外が設定されている場合、値を NULL にして
   呼び出してはいけません。

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

   "PyObject_SetAttr()" と同じですが、*attr_name* は PyObject* ではな
   く、UTF-8 でエンコードされたバイト文字列を指す const char* で指定し
   ます。

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

   例外が設定されているときに、*v* を "NULL" にしてこの関数を呼び出し
   てはいけません。 "NULL" チェックを忘れるとこの状態になることがあり
   、属性が削除されてしまいます。

   この関数に渡す属性名の種類は少数にとどめるべきです。 通常は、静的に
   割り当てた文字列を *attr_name* に使うことでそうします。 コンパイル
   時に分からない属性名には、"PyUnicode_FromString()" と
   "PyObject_SetAttr()" を直接呼び出すことを推奨します。 詳細は、キー
   オブジェクトを作成するために内部で使われる可能性のある
   "PyUnicode_InternFromString()" を参照してください。

   バージョン 3.15 で変更: 例外が設定されている場合、値を NULL にして
   呼び出してはいけません。

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)
    * 次に属します: Stable ABI (バージョン 3.13 より).*

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

int PyObject_DelAttrString(PyObject *o, const char *attr_name)
    * 次に属します: Stable ABI (バージョン 3.13 より).*

   "PyObject_DelAttr()" と同じですが、*attr_name* は PyObject* ではな
   く、UTF-8 でエンコードされたバイト文字列を指す const char* で指定し
   ます。

   この関数に渡す属性名の種類は少数にとどめるべきです。 通常は、静的に
   割り当てた文字列を *attr_name* に使うことでそうします。 コンパイル
   時に分からない属性名には、"PyUnicode_FromString()" と
   "PyObject_DelAttr()" を直接呼び出すことを推奨します。 詳細は、検索
   用のキーオブジェクトを作成するために内部で使われる可能性のある
   "PyUnicode_InternFromString()" を参照してください。

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

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

   オブジェクト *o* の "__dict__" を取得するためにこの関数を呼び出すこ
   ともできます。 その場合は *context* に "NULL" を渡してください。 こ
   の関数は辞書のメモリを割り当てる必要がある場合があるため、オブジェ
   クトの属性にアクセスするなら "PyObject_GetAttr()" の方が効率的なこ
   とがあります。

   失敗すると例外を設定して "NULL" を返します。

   Added in version 3.3.

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

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

   Added in version 3.3.

PyObject **_PyObject_GetDictPtr(PyObject *obj)

   オブジェクト *obj* の "__dict__" へのポインタを返します。
   "__dict__" がない場合は、例外を設定せずに "NULL" を返します。

   この関数は辞書のメモリを割り当てる必要がある場合があるため、オブジ
   ェクトの属性にアクセスするなら "PyObject_GetAttr()" の方が効率的な
   ことがあります。

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

   *opid* で指定された演算を使って *o1* と *o2* の値を比較します。
   *opid* は "Py_LT"、"Py_LE"、"Py_EQ"、"Py_NE"、"Py_GT"、"Py_GE" のい
   ずれかで、それぞれ "<"、"<="、"=="、"!="、">"、">=" に対応します。
   これは、"op" を *opid* に対応する演算子とした Python の式 "o1 op
   o2" と同等です。 成功すると比較の結果を返し、失敗すると "NULL" を返
   します。

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

   "PyObject_RichCompare()" と同様に、*opid* で指定された演算を使って
   *o1* と *o2* の値を比較します。 ただし、エラー時は "-1"、結果が偽な
   ら "0"、それ以外は "1" を返します。

注釈:

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

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

   *format_spec* を使って *obj* を書式化します。 Python の式
   "format(obj, format_spec)" と同等です。

   *format_spec* は "NULL" にできます。 その場合は "format(obj)" と同
   等です。 成功すると書式化された文字列を返し、失敗すると "NULL" を返
   します。

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

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

   引数が "NULL" の場合は文字列 "'<NULL>'" を返します。

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

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

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

   引数が "NULL" の場合は文字列 "'<NULL>'" を返します。

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

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

   引数が "NULL" の場合は文字列 "'<NULL>'" を返します。

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

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

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

   引数が "NULL" の場合は "bytes" オブジェクト "b'<NULL>'" を返します
   。

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

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

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

   If *cls* has a "__subclasscheck__()" method, it will be called to
   determine the subclass status as described in **PEP 3119**.
   Otherwise, *derived* is a subclass of *cls* if it is a direct or
   indirect subclass, i.e. contained in "cls.__mro__".

   通常はクラスオブジェクト、つまり "type" またはその派生クラスのイン
   スタンスだけがクラスとみなされます。 ただし、オブジェクトに
   "__bases__" 属性 (基底クラスのタプルでなければなりません) を持たせ
   ることで、この判定を変えられます。

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* のサブクラスである場合に、*inst* は *cls*
   のインスタンスとみなされます。

   インスタンス *inst* は "__class__" 属性を持つことで、自分のクラスと
   みなされるものを変更できます。

   オブジェクト *cls* は "__bases__" 属性 (基底クラスのタプルでなけれ
   ばなりません) を持つことで、クラスとみなされるかどうか、および基底
   クラスを変更できます。

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.*

   "type(o)" が *ハッシュ可能* でないことを示す "TypeError" を設定し、
   "-1" を返します。 この関数を "tp_hash" スロットに設定すると特別に扱
   われ、ハッシュ可能でないことを型からインタープリタに明示できます。

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.*

   *o* が "NULL" でない場合、オブジェクト *o* の型に対応する型オブジェ
   クトを返します。 失敗すると "SystemError" を送出して "NULL" を返し
   ます。 Python の式 "type(o)" と同等です。 この関数は戻り値への新し
   い *強参照* を作成します。 新しい *強参照* が必要な場合を除き、
   PyTypeObject* 型のポインタを返す "Py_TYPE()" 関数の代わりにこの関数
   を使う理由はありません。

int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)

   オブジェクト *o* の型が *type* またはそのサブタイプであればゼロ以外
   、そうでなければ "0" を返します。 どちらの引数も "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__()" による推定値を試み、最後にデフォル
   ト値を返します。 エラー時は "-1" を返します。 Python の式
   "operator.length_hint(o, defaultvalue)" と同等です。

   Added in version 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]" と同じです。

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

   "PyObject_DelItem()" と同じですが、*key* は PyObject* ではなく、
   UTF-8 でエンコードされたバイト文字列を指す const char* で指定します
   。

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

   Python の "__iter__(self): return self" メソッドと同等です。 *イテ
   レータ* 型の "PyTypeObject.tp_iter" スロットに使うことを想定してい
   ます。

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

   Python の式 "aiter(o)" と同等です。 "AsyncIterable" オブジェクトを
   受け取り、それに対する "AsyncIterator" を返します。 通常は新しいイ
   テレータですが、引数が "AsyncIterator" の場合はそれ自身を返します。
   オブジェクトを反復処理できない場合は "TypeError" を送出して "NULL"
   を返します。

   Added in version 3.10.

void *PyObject_GetTypeData(PyObject *o, PyTypeObject *cls)
    * 次に属します: Stable ABI (バージョン 3.12 より).*

   *cls* 用に確保されたサブクラス固有のデータへのポインタを取得します
   。

   オブジェクト *o* は *cls* のインスタンスでなければならず、*cls* は
   負の "PyType_Spec.basicsize" を使って作成されていなければなりません
   。 Python はこれを検証しません。

   エラー時は例外を設定して "NULL" を返します。

   Added in version 3.12.

Py_ssize_t PyType_GetTypeDataSize(PyTypeObject *cls)
    * 次に属します: Stable ABI (バージョン 3.12 より).*

   *cls* 用に確保されたインスタンスのメモリ領域のサイズ、つまり
   "PyObject_GetTypeData()" が返すメモリのサイズを返します。

   このサイズは "-PyType_Spec.basicsize" で要求したサイズより大きい場
   合があります。 その大きいサイズを使っても安全です (例えば
   "memset()" で使えます)。

   型 *cls* は負の "PyType_Spec.basicsize" を使って作成されて **いなけ
   ればなりません**。 Python はこれを検証しません。

   エラー時は例外を設定して負の値を返します。

   Added in version 3.12.

void *PyObject_GetItemData(PyObject *o)

   "Py_TPFLAGS_ITEMS_AT_END" が設定されたクラスの、要素ごとのデータへ
   のポインタを取得します。

   エラー時は例外を設定して "NULL" を返します。 *o* に
   "Py_TPFLAGS_ITEMS_AT_END" が設定されていない場合は "TypeError" を送
   出します。

   Added in version 3.12.

int PyObject_VisitManagedDict(PyObject *obj, visitproc visit, void *arg)

   *obj* のマネージド辞書を巡回します。

   この関数は "Py_TPFLAGS_MANAGED_DICT" フラグが設定された型の巡回関数
   内でのみ呼び出さなければなりません。

   Added in version 3.13.

void PyObject_ClearManagedDict(PyObject *obj)

   *obj* のマネージド辞書をクリアします。

   この関数は "Py_TPFLAGS_MANAGED_DICT" フラグが設定された型のクリア関
   数内でのみ呼び出さなければなりません。

   Added in version 3.13.

int PyUnstable_Object_EnableDeferredRefcount(PyObject *obj)

   *これは Unstable APIです。マイナーリリースで予告なく変更されること
   があります。*

   ランタイムが対応していれば、*obj* の 遅延参照カウント を有効にしま
   す。 *フリースレッド* ビルドでは、インタープリタが *obj* の参照カウ
   ントの更新を省略できるため、マルチスレッドの性能が向上する可能性が
   あります。 その代わり、*obj* はインタープリタからの参照がなくなった
   時点では解放されず、トレーシングガベージコレクタによってのみ解放さ
   れるようになります。

   *obj* の遅延参照カウントが有効になった場合は "1" を返します。 遅延
   参照カウントがサポートされていない場合や、すでに *obj* で有効になっ
   ている場合など、インタープリタがヒントを無視した場合は "0" を返しま
   す。 この関数はスレッドセーフで、失敗しません。

   *GIL* が有効なビルドは遅延参照カウントをサポートしないため、この関
   数は何もしません。 *obj* がガベージコレクタの追跡対象でない場合も何
   もしません ("gc.is_tracked()" と "PyObject_GC_IsTracked()" を参照)
   。

   この関数は、オブジェクトを作成するコード (例えば "tp_new" スロット)
   から、*obj* を作成した直後に呼び出すことを想定しています。

   Added in version 3.14.

int PyUnstable_Object_IsUniqueReferencedTemporary(PyObject *obj)

   *これは Unstable APIです。マイナーリリースで予告なく変更されること
   があります。*

   *obj* が唯一の参照を持つ一時オブジェクトかどうかを調べます。 そうで
   あると分かる場合は "1"、それ以外の場合は "0" を返します。 この関数
   は失敗しませんが、判定は保守的なので、実際に唯一の参照を持つ一時オ
   ブジェクトでも "0" を返すことがあります。

   オブジェクトが唯一の参照を持つ一時オブジェクトであれば、現在のコー
   ドがそのオブジェクトへの唯一の参照を持つことが保証されます。 C 関数
   の引数については、参照カウントが "1" かどうかを調べる代わりにこの関
   数を使うべきです。 Python 3.14 以降、インタープリタはオペランドスタ
   ックにオブジェクトを読み込むとき、可能であれば参照を *借用* して一
   部の参照カウントの変更を省略します。 このため、参照カウントが "1"
   というだけでは、関数の引数への参照が唯一であることは保証されません
   。

   次の例では、"my_func" に渡される引数は唯一の参照を持つ一時オブジェ
   クトです。

      my_func([1, 2, 3])

   次の例では、参照カウントが "1" であっても、"my_func" に渡される引数
   は唯一の参照を持つ一時オブジェクトでは **ありません**。

      my_list = [1, 2, 3]
      my_func(my_list)

   "Py_REFCNT()" 関数も参照してください。

   Added in version 3.14.

int PyUnstable_IsImmortal(PyObject *obj)

   *これは Unstable APIです。マイナーリリースで予告なく変更されること
   があります。*

   *obj* が *不死* の場合はゼロ以外、そうでなければゼロを返します。 こ
   の関数は失敗しません。

   注釈:

     ある CPython バージョンで不死のオブジェクトが、別のバージョンでも
     不死であるとは限りません。

   Added in version 3.14.

int PyUnstable_TryIncRef(PyObject *obj)

   *これは Unstable APIです。マイナーリリースで予告なく変更されること
   があります。*

   *obj* の参照カウントがゼロでなければ、参照カウントを増やします。 増
   やすことに成功した場合は "1"、それ以外の場合は "0" を返します。

   *obj* に対してあらかじめ "PyUnstable_EnableTryIncRef()" を呼び出し
   ておく必要があります。 そうしなければ、*フリースレッドビルド* では
   誤って "0" を返す場合があります。

   この関数は論理的には次の C コードと同等ですが、*フリースレッドビル
   ド* ではアトミックに動作します。

      if (Py_REFCNT(op) > 0) {
         Py_INCREF(op);
         return 1;
      }
      return 0;

   これは、Python の 弱参照オブジェクト のオーバーヘッドなしで弱参照を
   管理するための基礎として使うことを想定しています。

   通常、この関数を正しく使うには *obj* の解放関数 ("tp_dealloc") によ
   るサポートが必要です。 例えば、次の概略コードを応用すると、特定の型
   に対して "WeakValueDictionary" のように動作する「weakmap」を実装で
   きます。

      PyMutex mutex;

      PyObject *
      add_entry(weakmap_key_type *key, PyObject *value)
      {
          PyUnstable_EnableTryIncRef(value);
          weakmap_type weakmap = ...;
          PyMutex_Lock(&mutex);
          weakmap_add_entry(weakmap, key, value);
          PyMutex_Unlock(&mutex);
          Py_RETURN_NONE;
      }

      PyObject *
      get_value(weakmap_key_type *key)
      {
          weakmap_type weakmap = ...;
          PyMutex_Lock(&mutex);
          PyObject *result = weakmap_find(weakmap, key);
          if (PyUnstable_TryIncRef(result)) {
              // `result` は安全に使える
              PyMutex_Unlock(&mutex);
              return result;
          }
          // ここに到達した場合、`result` のガベージコレクションが始まっているが、
          // まだ weakmap からは削除されていない
          PyMutex_Unlock(&mutex);
          return NULL;
      }

      // weakmap の値の tp_dealloc 関数
      void
      value_dealloc(PyObject *value)
      {
          weakmap_type weakmap = ...;
          PyMutex_Lock(&mutex);
          weakmap_remove_value(weakmap, value);

          ...
          PyMutex_Unlock(&mutex);
      }

   Added in version 3.14.

void PyUnstable_EnableTryIncRef(PyObject *obj)

   *これは Unstable APIです。マイナーリリースで予告なく変更されること
   があります。*

   *obj* に対して後で "PyUnstable_TryIncRef()" を使えるようにします。
   呼び出し時に、呼び出し側は *obj* への *強参照* を保持していなければ
   なりません。

   Added in version 3.14.

int PyUnstable_Object_IsUniquelyReferenced(PyObject *op)

   *これは Unstable APIです。マイナーリリースで予告なく変更されること
   があります。*

   *op* への参照が 1 つだけかどうかを調べます。

   GIL が有効なビルドでは、この関数は Py_REFCNT(op) == 1 と同等です。

   *フリースレッドビルド* では、*op* の *参照カウント* が 1 かどうかに
   加えて、*op* がこのスレッドだけで使われているかどうかも調べます。
   Py_REFCNT(op) == 1 はフリースレッドビルドではスレッドセーフでは **
   ありません**。 代わりにこの関数を使うことを推奨します。

   この関数は Python インタープリタを呼び出しませんが、呼び出し側は *
   アタッチされたスレッド状態* を保持していなければなりません。 この関
   数は失敗しません。

   Added in version 3.14.

int PyUnstable_SetImmortal(PyObject *op)

   *これは Unstable APIです。マイナーリリースで予告なく変更されること
   があります。*

   オブジェクト *op* を *不死* にします。 引数のオブジェクトへの参照は
   、呼び出し元スレッドが唯一の参照として保持している必要があります。
   これは *フリースレッドビルド* で、スレッド間で共有するオブジェクト
   の参照カウントを巡る競合を減らすために使うことを想定しています。

   この処理は一方向です。 オブジェクトを不死にすることはできますが、再
   び有限の寿命を持つようには戻せません。 不死のオブジェクトは参照カウ
   ントの対象にならず、ガベージコレクションで回収されることもありませ
   ん。 GC の追跡対象になっている場合は、追跡対象から外されます。

   この関数は、オブジェクトを作成するコード (例えば "tp_new" スロット)
   から、*op* を作成した直後に呼び出すことを想定しています。 オブジェ
   クトが不死になった場合は 1、ならなかった場合は 0 を返します。 この
   関数は失敗しません。

   Added in version 3.15.
