[Python-Dev] Need a way to test for 8-bit-or-unicode-string
Guido van Rossum
guido@python.org
Fri, 05 Oct 2001 11:46:57 -0400
Here's an implementation of Neil's idea.
*** abstract.c 2001/10/01 17:10:18 2.83
--- abstract.c 2001/10/05 15:49:04
***************
*** 1805,1810 ****
--- 1805,1829 ----
else if (PyType_Check(cls)) {
retval = PyObject_TypeCheck(inst, (PyTypeObject *)cls);
}
+ else if (PySequence_Check(cls)) {
+ int i, n;
+
+ cls = PySequence_Fast(
+ cls, "isinstance() arg 2 is an unacceptable sequence");
+ if (cls == NULL)
+ return -1;
+ n = PySequence_Size(cls);
+ if (n < 0)
+ retval = -1;
+ for (i = 0; i < n; i++) {
+ retval = PyObject_IsInstance(
+ inst, PySequence_Fast_GET_ITEM(cls, i));
+ if (retval != 0)
+ break;
+ }
+ Py_DECREF(cls);
+ return retval;
+ }
else if (!PyInstance_Check(inst)) {
if (__class__ == NULL) {
__class__ = PyString_FromString("__class__");
***************
*** 1827,1833 ****
if (retval < 0) {
PyErr_SetString(PyExc_TypeError,
! "isinstance() arg 2 must be a class or type");
}
return retval;
}
--- 1846,1853 ----
if (retval < 0) {
PyErr_SetString(PyExc_TypeError,
! "isinstance() arg 2 must be a class or type "
! "or tuple of those");
}
return retval;
}
--Guido van Rossum (home page: http://www.python.org/~guido/)