ショートバージョン
最近、関数の戻り値の型が ドキュメント でPyObject
として指定されているPythonコードに遭遇しました。 PyObject
とは何ですか?
詳細バージョン
私はC/C++プログラマではありませんが、上記のドキュメントでPyObject
に遭遇したとき、GoogleはPyObject
がPython/C APIを使用して定義されたPythonオブジェクトであることを教えてくれました。具体的には、 APIドキュメント は、PyObjectを次のように定義します。
すべてのオブジェクトタイプは、このタイプの拡張です。これは、Pythonがオブジェクトへのポインタをオブジェクトとして扱うために必要な情報を含む型です。通常の「リリース」ビルドでは、オブジェクトの参照カウントと対応するタイプオブジェクトへのポインターのみが含まれます。これは、PyObject_HEADマクロの展開によって定義されたフィールドに対応しています。
率直に言って、私はこれを完全に理解していないか、またはそれが私の基本的な質問に答えるかどうかはわかりませんが、PyObject
をPythonオブジェクトと完全に考えるのは明らかに間違っているとは思いません。一方、技術的にPyObject
として数えるには、型はPython/C APIを使用して標準Pythonの拡張として作成されている必要があります。たとえば、整数はPyObject
ですか?
関連する可能性のあるリンク
http://docs.scipy.org/doc/numpy/reference/c-api.types-and-structures.html
Python=で触れることができるすべての値は、CではPyObject
です。これには、リスト、辞書、ソケット、ファイル、整数、文字列、関数、クラスが含まれます。名前を付けます。あなたはそれをPythonで触れることができます、それはCのPyObject
です。
PyObject
は、実際にはCレベルのPythonオブジェクトです。そしてPythonの整数はオブジェクトなので、これらはPyObject
s。PythonまたはCのどちらで記述されたかに関係なく、CレベルではPyObject
です。