オブジェクトプロトコル (object protocol)¶
-
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)
と同じです。この関数は常に成功します。
-
int
PyObject_HasAttrString
(PyObject *o, const char *attr_name)¶ o が属性 attr_name を持つときに
1
を、それ以外のときに0
を返します。この関数は Python の式hasattr(o, attr_name)
と同じです。この関数は常に成功します。
-
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)¶ 型オブジェクトの
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_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
を返します。
-
int
PyObject_Cmp
(PyObject *o1, PyObject *o2, int *result)¶ o1 と o2 の値を比較します。このとき o1 が比較ルーチンを持っていればそれを使い、なければ o2 のルーチンを使います。比較結果は result に返されます。失敗すると
-1
を返します。 Python 文result = cmp(o1, o2)
と同じです。
-
int
PyObject_Compare
(PyObject *o1, PyObject *o2)¶ o1 と o2 の値を比較します。このとき o1 が比較ルーチンを持っていればそれを使い、なければ o2 のルーチンを使います。成功すると比較結果を返します。エラーが生じた場合の戻り値は未定義です;
PyErr_Occurred()
を使ってエラー検出を行って下さい。Python 式cmp(o1, o2)
と同じです。
-
PyObject*
PyObject_Repr
(PyObject *o)¶ - Return value: New reference.
o の文字列表現を計算します。成功すると文字列表現を返し、失敗すると NULL を返します。Python 式
repr(o)
と同じです。この関数は組み込み関数repr()
や逆クオート表記の処理で呼び出されます。
-
PyObject*
PyObject_Str
(PyObject *o)¶ - Return value: New reference.
o の文字列表現を計算します。成功すると文字列表現を返し、失敗すると NULL を返します。Python 式
str(o)
と同じです。この関数は組み込み関数str()
やprint
文の処理で呼び出されます。
-
PyObject*
PyObject_Bytes
(PyObject *o)¶ o オブジェクトの bytes 表現を計算します。 2.x では、単なる
PyObject_Str()
のエイリアスです。
-
PyObject*
PyObject_Unicode
(PyObject *o)¶ - Return value: New reference.
o の Unicode 文字列表現を計算します。成功すると Unicode 文字列表現を返し失敗すると NULL を返します。 Python 式
unicode(o)
と同じです。この関数は組み込み関数unicode()
の処理で呼び出されます。
-
int
PyObject_IsInstance
(PyObject *inst, PyObject *cls)¶ inst が cls のインスタンスか、 cls のサブクラスのインスタンスの場合に
1
を返し、そうでなければ0
を 返します。エラーの時には-1
を返し、例外をセットします。 cls がクラスオブジェクトではなく型オブジェクトの場合、PyObject_IsInstance()
は inst が cls であるときに1
を返します。 cls をタプルで指定した場合、 cls に指定した全てのエントリについてチェックを行います。少なくとも一つのエントリに対するチェックが1
を返せば結果は1
になり、そうでなければ0
になります。 inst がクラスインスタンスでなく、かつ cls が 型オブジェクトでもクラスオブジェクトでもタプルでもない場合、 inst には__class__
属性がなくてはなりませんバージョン 2.1 で追加.
バージョン 2.2 で変更: 二つ目の引数にタプルのサポートを追加しました。
サブクラスの決定はかなり素直な方法で行いますが、クラスシステムの拡張を実装する人たちに知っておいて欲しいちょっとした問題点があります。
A
と B
がクラスオブジェクトの場合、 B
が A
のサブクラスとなるのは、 B
が A
を直接的あるいは間接的に継承 (inherit) している場合です。両方がクラスオブジェクトでない場合、二つのオブジェクト間のクラス関係を決めるには、より汎用的な機構を使います。
B が A のサブクラスであるか調べたとき、 A が B と等しければ、 PyObject_IsSubclass()
は真を返します。
A および B が異なるオブジェクトなら、 B の __bases__
属性から深さ優先探索 (depth-first search)で A を探索します
-
int
PyObject_IsSubclass
(PyObject *derived, PyObject *cls)¶ クラス derived が cls と同じクラスか、 cls の派生クラスの場合に
1
を返し、それ以外の場合には0
を返します。エラーが生じると-1
を返します。 cls をタプルで指定した場合、 cls に指定した全てのエントリについてチェックを行います。少なくとも一つのエントリに対するチェックが1
を返せば結果は1
になり、そうでなければ0
になります。 derived または cls のいずれかが実際のクラスオブジェクト (あるいはタプル) でない場合、上で述べた汎用アルゴリズムを使います。バージョン 2.1 で追加.
バージョン 2.3 で変更: 以前の Python のバージョンは、二つ目の引数にタプルをサポートしていませんでした。
-
int
PyCallable_Check
(PyObject *o)¶ オブジェクト o が呼び出し可能オブジェクトかどうか調べます。オブジェクトが呼び出し可能であるときに
1
を返し、そうでないときには0
を返します。この関数呼び出しは常に成功します。
-
PyObject*
PyObject_Call
(PyObject *callable_object, PyObject *args, PyObject *kw)¶ - Return value: New reference.
呼び出し可能な Python オブジェクト callable_object をタプルで指定された引数 args および辞書で指定された名前つき引数 (named argument) kw とともに呼び出します。名前つき引数を必要としない場合、 kw を NULL にしてもかまいません。 args は NULL であってはなりません。引数が全く必要ない場合には空のタプルを使ってください。成功すると呼び出し結果として得られたオブジェクトを返し、失敗すると NULL を返します。 Python の式
apply(callable_object, args, kw)
あるいはcallable_object(*args, **kw)
と同じです。バージョン 2.2 で追加.
-
PyObject*
PyObject_CallObject
(PyObject *callable_object, PyObject *args)¶ - Return value: New reference.
呼び出し可能な Python オブジェクト callable_object をタプルで指定された引数 args とともに呼び出します。 引数を必要としない場合、 args を NULL にしてもかまいません。成功すると呼び出し結果として得られたオブジェクトを返し、失敗すると NULL を返します。 Python の式
apply(callable_object, args)
あるいはcallable_object(*args)
と同じです。
-
PyObject*
PyObject_CallFunction
(PyObject *callable, char *format, ...)¶ - Return value: New reference.
呼び出し可能な Python オブジェクト callable_object を可変数個の C 引数とともに呼び出します。C 引数は
Py_BuildValue()
形式のフォーマット文字列を使って記述します。 format は NULL にしてもよく、与える引数がないことを表します。成功すると呼び出し結果として得られたオブジェクトを返し、失敗すると NULL を返します。 Python の式apply(callable, args)
あるいはcallable(*args)
と同じです。もしも、PyObject *
args だけを引数に渡す場合は、PyObject_CallFunctionObjArgs()
がより速い方法であることを覚えておいてください。
-
PyObject*
PyObject_CallMethod
(PyObject *o, char *method, char *format, ...)¶ - Return value: New reference.
オブジェクト o の method という名前のメソッドを、可変数個の C 引数とともに呼び出します。C 引数はタプルを生成するような
Py_BuildValue()
形式のフォーマット文字列を使って記述します。 format は NULL にしてもよく、与える引数がないことを表します。成功すると呼び出し結果として得られたオブジェクトを返し、失敗すると NULL を返します。 Python の式o.method(args)
と同じです。もしも、PyObject *
args だけを引数に渡す場合は、PyObject_CallMethodObjArgs()
がより速い方法であることを覚えておいてください。
-
PyObject*
PyObject_CallFunctionObjArgs
(PyObject *callable, ..., NULL)¶ - Return value: New reference.
呼び出し可能な Python オブジェクト callable を可変数個の
PyObject*
引数とともに呼び出します。引数列は末尾に NULL がついた可変数個のパラメタとして与えます。成功すると呼び出し結果として得られたオブジェクトを返し失敗すると NULL を返します。バージョン 2.2 で追加.
-
PyObject*
PyObject_CallMethodObjArgs
(PyObject *o, PyObject *name, ..., NULL)¶ - Return value: New reference.
オブジェクト o のメソッドを呼び出します、メソッド名は Python 文字列オブジェクト name で与えます。可変数個の
PyObject*
引数と共に呼び出されます. 引数列は末尾に NULL がついた可変数個のパラメタとして与えます。成功すると呼び出し結果として得られたオブジェクトを返し失敗すると NULL を返します。バージョン 2.2 で追加.
-
long
PyObject_HashNotImplemented
(PyObject *o)¶ type(o)
がハッシュ不可能であることを示すTypeError
を設定し、-1
を返します。この関数はtp_hash
スロットに格納されたときには特別な扱いを受け、その type がハッシュ不可能であることをインタプリタに明示的に示します。バージョン 2.6 で追加.
-
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 であってはなりません。
バージョン 2.2 で追加.
-
Py_ssize_t
PyObject_Length
(PyObject *o)¶ -
Py_ssize_t
PyObject_Size
(PyObject *o)¶ o の長さを返します。ただしオブジェクト o がシーケンス型プロトコルとマップ型プロトコルの両方を提供している場合、シーケンスとしての長さを返します。エラーが生じると
-1
を返します。 Python の式len(o)
と同じです。バージョン 2.5 で変更: これらの関数は以前は
int
を返していました。この変更により、 64bit システムを正しくサポートするには修正が必要になります。
-
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]
と同じです。
-
int
PyObject_AsFileDescriptor
(PyObject *o)¶ Python オブジェクトからファイル記述子を取り出します。オブジェクトが整数か長整数なら、その値を返します。 (長)整数でない場合、オブジェクトに
fileno()
メソッドがあれば呼び出します; この場合、fileno()
メソッドは整数または長整数をファイル記述子の値として返さなければなりません。失敗すると-1
を返します。
-
PyObject*
PyObject_Dir
(PyObject *o)¶ - Return value: New reference.
この関数は Python の式
dir(o)
と同じで、オブジェクトの変数名に割り当てている文字列からなるリスト (空の場合もあります) を返します。エラーの場合には NULL を返します。引数を NULL にすると、Python におけるdir()
と同様に、現在のローカルな名前を返します; この場合、アクティブな実行フレームがなければ NULL を返しますが、PyErr_Occurred()
は偽を返します。