Python <__ main __。class对象位于0x107857490>

时间:2020-06-20 01:16:31

标签: python-3.x

我正在寻找有关Python如何使用在打印实例对象<< strong> main .class对象(位于0x107857490>时)找到的地址表示形式的资源。

我的猜测是这不能是硬件地址,因为我知道即使C也不代表代码中的硬件地址,而只是为您提供了代表C运行时中地址的指针。

是否有关于python这样的实现细节的资源?

1 个答案:

答案 0 :(得分:2)

我假设您正在特别询问CPython实现。

CPython Github repo中,文件Objects/object.c似乎有我们的答案。在line 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 gives the value of the pointer v