Re: [Python-Dev] operator.is*Type
by Delaney, Timothy (Tim)
Raymond Hettinger wrote:
> 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.
Hmm - just a thought ...
Since we're adding the __index__ magic method, why not have a
__getindexed__ method for sequences.
Then semantics of indexing operations would be something like:
if hasattr(obj, '__getindexed__'):
Similarly __setindexed__ and __delindexed__.
This would allow distinguishing between sequences and mappings in a
fairly backwards-compatible way. It would also enforce that only indexes
can be used for sequences.
The backwards-incompatibility comes in when you have a type that
implements __getindexed__, and a subclass that implements __getitem__
e.g. if `list` implemented __getindexed__ then any `list` subclass that
overrode __getitem__ would fail. However, I think we could make it 100%
backwards-compatible for the builtin sequence types if they just had
__getindexed__ delegate to __getitem__. Effectively:
class list (object):
def __getindexed__(self, index):