bpo-27541: Reprs of subclasses of some classes now contain actual type name. (#3631)
Affected classes are bytearray, array, deque, defaultdict, count and repeat.
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
index 8766d86..e78399d 100644
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -1384,10 +1384,12 @@
return NULL;
}
if (((dequeobject *)deque)->maxlen >= 0)
- result = PyUnicode_FromFormat("deque(%R, maxlen=%zd)",
- aslist, ((dequeobject *)deque)->maxlen);
+ result = PyUnicode_FromFormat("%s(%R, maxlen=%zd)",
+ _PyType_Name(Py_TYPE(deque)), aslist,
+ ((dequeobject *)deque)->maxlen);
else
- result = PyUnicode_FromFormat("deque(%R)", aslist);
+ result = PyUnicode_FromFormat("%s(%R)",
+ _PyType_Name(Py_TYPE(deque)), aslist);
Py_ReprLeave(deque);
Py_DECREF(aslist);
return result;
@@ -2127,7 +2129,8 @@
Py_DECREF(baserepr);
return NULL;
}
- result = PyUnicode_FromFormat("defaultdict(%U, %U)",
+ result = PyUnicode_FromFormat("%s(%U, %U)",
+ _PyType_Name(Py_TYPE(dd)),
defrepr, baserepr);
Py_DECREF(defrepr);
Py_DECREF(baserepr);