On Sat, Mar 3, 2012 at 13:02, Antoine Pitrou <solip...@pitrou.net> wrote:
> On Sat, 3 Mar 2012 12:59:13 -0800 > Thomas Wouters <tho...@python.org> wrote: > > > > Why even have separate tp_as_sequence and tp_as_mapping anymore? That > > particular distinction never existed for Python types, so why should it > > exist for C types at all? I forget if there was ever a real point to it, > > but all it seems to do now is create confusion, what with many sequence > > types implementing both, and PyMapping_Check() and PySequence_Check() > doing > > seemingly random things to come up with somewhat sensible answers. > > Ironically, most of the confusion stems from sequence types > implementing the mapping protocol for extended slicing. > > > Do note > > that the dict type actually implements tp_as_sequence (in order to > support > > containtment tests) and that PySequence_Check() has to explicitly return > 0 > > for dicts -- which means that it will give the "wrong" answer for another > > type that behaves exactly like dicts. > > It seems to be a leftover: > > int > PySequence_Check(PyObject *s) > { > if (PyDict_Check(s)) > return 0; > return s != NULL && s->ob_type->tp_as_sequence && > s->ob_type->tp_as_sequence->sq_item != NULL; > } > > Dict objects have a NULL sq_item so even removing the explicit check > would still return the right answer. > > > Getting rid of the misleading distinction seems like a much better idea > > than trying to re-conflate some of the issues. > > This proposal sounds rather backwards, given that we now have separate > Mapping and Sequence ABCs. > I'm not sure how the ABCs, which are abstract declarations of semantics, tie into this specific implementation detail. ABCs work just as well for Python types as for C types, and Python types don't have this distinction. The distinction in C types has been *practically* useless for years, so why should it stay? What is the actual benefit here? -- Thomas Wouters <tho...@python.org> Hi! I'm a .signature virus! copy me into your .signature file to help me spread!
_______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com