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