在 Python 中,有两种方式可以生成对象的文本表示: repr() 函数和 str() 函数。 (print() 函数会直接调用 str()。) 这些处理程序都是可选的。
reprfunc tp_repr;
reprfunc tp_str;
tp_repr 处理程序应该返回一个字符串对象,其中包含调用它的实例的表示形式。 下面是一个简单的例子:
static PyObject *
newdatatype_repr(newdatatypeobject *obj)
{
return PyUnicode_FromFormat("Repr-ified_newdatatype{{size:%d}}",
obj->obj_UnderlyingDatatypePtr->size);
}
如果没有指定 tp_repr 处理句柄,解释器将提供一个使用类型的 tp_name 的表示形式以及对象的唯一标识值。
tp_str 处理句柄对于 str() 就如上述的 tp_repr 处理句柄对于 repr() 一样;也就是说,它会在当 Python 代码在你的对象的某个实例上调用 str() 时被调用。 它的实现与 tp_repr 函数非常相似,但其结果字符串是供人类查看的。 如果未指定 tp_str,则会使用 tp_repr 重句柄来代替。
下面是一个简单的例子:
static PyObject *
newdatatype_str(newdatatypeobject *obj)
{
return PyUnicode_FromFormat("Stringified_newdatatype{{size:%d}}",
obj->obj_UnderlyingDatatypePtr->size);
} |