web-dev-qa-db-ja.com

PythonのPyObjectとは何ですか?

ショートバージョン

最近、関数の戻り値の型が ドキュメント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

26
eric

Python=で触れることができるすべての値は、CではPyObjectです。これには、リスト、辞書、ソケット、ファイル、整数、文字列、関数、クラスが含まれます。名前を付けます。あなたはそれをPythonで触れることができます、それはCのPyObjectです。

14
icktoofay

PyObjectは、実際にはCレベルのPythonオブジェクトです。そしてPythonの整数はオブジェクトなので、これらはPyObjects。PythonまたはCのどちらで記述されたかに関係なく、CレベルではPyObjectです。