pass
d = D()
e = E()
+ D.__bases__ = (C,)
D.__bases__ = (C2,)
vereq(d.meth(), 1)
vereq(e.meth(), 1)
# actually, we'll have crashed by here...
raise TestFailed, "shouldn't be able to create inheritance cycles"
+ try:
+ D.__bases__ = (E,)
+ except TypeError:
+ pass
+ else:
+ raise TestFailed, "shouldn't be able to create inheritance cycles"
+
# let's throw a classic class into the mix:
class Classic:
def meth2(self):
type->tp_name, ob->ob_type->tp_name);
return -1;
}
- if (PyType_IsSubtype(type, (PyTypeObject*)ob)) {
- PyErr_SetString(PyExc_TypeError,
- "a __bases__ item causes an inheritance cycle");
- return -1;
+ if (PyType_Check(ob)) {
+ if (PyType_IsSubtype((PyTypeObject*)ob, type)) {
+ PyErr_SetString(PyExc_TypeError,
+ "a __bases__ item causes an inheritance cycle");
+ return -1;
+ }
}
}