# オブジェクトプロトコル (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()` を使うのが望ましいです。

  The number of different attribute names passed to this function should be kept small, usually by using a statically allocated string as attr_name. For attribute names that aren't known at compile time, prefer calling `PyUnicode_FromString()` and `PyObject_SetAttr()` directly. For more details, see `PyUnicode_InternFromString()`, which may be used internally to create a key object.

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

  The number of different attribute names passed to this function should be kept small, usually by using a statically allocated string as attr_name. For attribute names that aren't known at compile time, prefer calling `PyUnicode_FromString()` and `PyObject_DelAttr()` directly. For more details, see `PyUnicode_InternFromString()`, which may be used internally to create a key object for lookup.

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.

  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)

  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` になります。

  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__`.

  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` になります。

  If cls has a `__instancecheck__()` method, it will be called to determine the subclass status as described in PEP 3119. Otherwise, inst is an instance of cls if its class is a subclass of 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)` と同じです。

  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.

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

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.

  This is equivalent to the Python `__iter__(self): return self` method. It is intended for iterator types, to be used in the `PyTypeObject.tp_iter` slot.

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.

  Added in version 3.10.

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

  Get a pointer to subclass-specific data reserved for cls.

  The object o must be an instance of cls, and cls must have been created using negative `PyType_Spec.basicsize`. Python does not check this.

  On error, set an exception and return `NULL`.

  Added in version 3.12.

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

  Return the size of the instance memory space reserved for cls, i.e. the size of the memory `PyObject_GetTypeData()` returns.

  This may be larger than requested using `-PyType_Spec.basicsize`; it is safe to use this larger size (e.g. with `memset()`).

  The type cls must have been created using negative `PyType_Spec.basicsize`. Python does not check this.

  On error, set an exception and return a negative value.

  Added in version 3.12.

void *PyObject_GetItemData(PyObject *o)

  Get a pointer to per-item data for a class with `Py_TPFLAGS_ITEMS_AT_END`.

  On error, set an exception and return `NULL`. `TypeError` is raised if o does not have `Py_TPFLAGS_ITEMS_AT_END` set.

  Added in version 3.12.