En Mon, 16 Nov 2009 07:44:34 -0300, lallous <lall...@lgwm.org> escribió:

Actually, the object class is defined as:
    class __object(object):
        def __getitem__(self, idx):
            return getattr(self, idx)

Anyway, now I check like this:

bool PyIsSequenceType(PyObject *obj)
{
  if (!PySequence_Check(obj))
    return false;
  Py_ssize_t sz = PySequence_Size(obj);
  if (sz == -1 || PyErr_Occurred() != NULL)
  {
    PyErr_Clear();
    return false;
  }
  return true;
}

I don't like it, any other suggestions?

Yes: find another name for the "thing" you're checking for. It's not the same as a "sequence" in the Python sense.

Perhaps you want to consider your type a mapping? Sequences and mappings have a lot in common (mappings have length too.) In C you have separate slots tp_as_sequence, tp_as_mapping; but in Python code, __getitem__ is used for both meanings (and goes into both set of pointers.) tp_as_mapping takes precedence over tp_as_sequence.

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to