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  /  [EMAIL PROTECTED]  /  http://blog.ianbicking.org
_______________________________________________
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

Reply via email to