bugfix> python-3.x > 投稿

インスタンスオブジェクトを出力するときに見つかったアドレス表現をPythonがどのように使用するかについてのリソースを探しています<メイン0x107857490の.classオブジェクト>。

私の推測では、Cでさえコードでハードウェアアドレスを表さず、代わりにCランタイムのアドレスを表すポインタを提供するだけなので、これをハードウェアアドレスにすることはできません。

このようなPythonでの実装の詳細に関するリソースはありますか?

回答 1 件
  • 特にCPythonの実装について質問していると思います。

    CPython Githubリポジトリでは、ファイル Objects/object.c 私たちの答えがあるようです。 390行目で関数が定義されています PyObject_Repr(PyObject *v) 、いくつかのチェックの後、次のコードがあります。

       if (Py_TYPE(v)->tp_repr == NULL)
            return PyUnicode_FromFormat("<%s object at %p>",
                                        Py_TYPE(v)->tp_name, v);
    
    

    これは私に次のように読みます:

       // If the Python object v does not have a custom __repr__
        if (Py_TYPE(v)->tp_repr == NULL)
            // then return '<' + name_of_type + ' object at ' + v + '>'
            return PyUnicode_FromFormat("<%s object at %p>",
                                        Py_TYPE(v)->tp_name, v);
    
    

    仮定して PyUnicode_FromFormat と同じ構文を使用します printf 、その後 %p ポインタの値を与える v

あなたの答え