[Python-Dev] PySequence_Check but no len (original) (raw)

Terry Reedy tjreedy at udel.edu
Fri Jun 22 20:30:25 EDT 2018


On 6/22/2018 7:57 PM, Greg Ewing wrote:

Terry Reedy wrote:

I am surprised that a C-API function calls something a 'sequence' without it having len. It's a bit strange that PySequenceCheck exists at all. The principle of duck typing would suggest that one should be checking for the specific methods one needs. I suspect it's a holdover from very early Python, where the notion of a "sequence type" and a "mapping type" were more of a concrete thing. This is reflected in the existence of the tpassequence and tpasmapping substructures. It was expected that a given type would either implement all the methods in one of those substructures or none of them, so shorcuts such as checking for just one method and assuming the others would exist made sense. But user-defined classes messed all that up, because it became possible to create a type that has getitem but not len, etc. It also made it impossible to distinguish reliably between a sequence and a mapping. So it seems to me that PySequenceCheck and related functions are not very useful any more, since it's not possible for them to really do what they claim to do.

So one should not take them as defining what they appear to define. In a sense, 'PySequence_Check' should be 'PySubscriptable_Check'.

-- Terry Jan Reedy



More information about the Python-Dev mailing list