我正在寻找有关Python如何使用在打印实例对象<< strong> main .class对象(位于0x107857490>时)找到的地址表示形式的资源。
我的猜测是这不能是硬件地址,因为我知道即使C也不代表代码中的硬件地址,而只是为您提供了代表C运行时中地址的指针。
是否有关于python这样的实现细节的资源?
答案 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
。