[Python-Dev] operator.is*Type

Ian Bicking ianb at colorstudy.com
Wed Feb 22 18:10:14 CET 2006


Raymond Hettinger wrote:
>>>>>from operator import isSequenceType, isMappingType
>>>>>class anything(object):
>>>>... def __getitem__(self, index):
>>... pass
>>...
>>>>>>>something = anything()
>>>>>isMappingType(something)
>>>>True
>>>>>>>isSequenceType(something)
>>>>True
>>>>I suggest we either deprecate these functions as worthless, *or* we
>>define the protocols slightly more clearly for user defined classes.
>>> They are not worthless. They do a damned good job of differentiating anything 
> that CAN be differentiated.

But they are just identical...? They seem terribly pointless to me. 
Deprecation is one option, of course. I think Michael's suggestion also 
makes sense. *If* we distinguish between sequences and mapping types 
with two functions, *then* those two functions should be distinct. It 
seems kind of obvious, doesn't it?
I think hasattr(obj, 'keys') is the simplest distinction of the two 
kinds of collections.
> Your example simply highlights the consequences of one of Python's most basic, 
> original design choices (using getitem for both sequences and mappings). That 
> choice is now so fundamental to the language that it cannot possibly change. 
> Get used to it.
>> In your example, the results are correct. The "anything" class can be viewed as 
> either a sequence or a mapping.
>> In this and other posts, you seem to be focusing your design around notions of 
> strong typing and mandatory interfaces. I would suggest that that approach is 
> futile unless you control all of the code being run.

I think you are reading too much into it. If the functions exist, they 
should be useful. That's all I see in Michael's suggestion.
-- 
Ian Bicking / ianb at colorstudy.com / http://blog.ianbicking.org


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /