diff -r 2b7b203e3909 Lib/ctypes/test/test_simplesubclasses.py --- a/Lib/ctypes/test/test_simplesubclasses.py Wed Jan 11 20:18:03 2017 +0200 +++ b/Lib/ctypes/test/test_simplesubclasses.py Sat Jan 14 02:12:36 2017 +0000 @@ -7,6 +7,10 @@ return NotImplementedError return self.value == other.value + # See issue 29270. + def __repr__(self): + return super().__repr__() + class Test(unittest.TestCase): def test_compare(self): diff -r 2b7b203e3909 Modules/_ctypes/_ctypes.c --- a/Modules/_ctypes/_ctypes.c Wed Jan 11 20:18:03 2017 +0200 +++ b/Modules/_ctypes/_ctypes.c Sat Jan 14 02:12:36 2017 +0000 @@ -1771,6 +1771,13 @@ PyObject *swapped_args; static PyObject *suffix; Py_ssize_t i; + PyObject *dict = PyTuple_GET_ITEM(args, 2); + _Py_IDENTIFIER(__classcell__); + + /* Prevent PyType_Type.tp_new from overwriting the primary class that + * was already set in __classcell__. See issue 29270. */ + if (_PyDict_DelItemId(dict, &PyId___classcell__)) + PyErr_Clear(); swapped_args = PyTuple_New(PyTuple_GET_SIZE(args)); if (!swapped_args)