On Sep 29, 2019, at 16:41, Steven D'Aprano <st...@pearwood.info> wrote:
> 
>> On Sun, Sep 29, 2019 at 11:27:32AM +0100, Oscar Benjamin wrote:
>> 
>> That's the point that I would make as well. What can you do with an
>> object that is only known to be Subscriptable?
> 
> I can subscript it. What did you expect the answer to be?

I think the idea here is that your type follows the “old sequence protocol”, 
where you can index it with 0, 1, … until you get an IndexError, without having 
to check __len__ first.

Since there are various bits of Python (including the iter function) that 
support this protocol, it’s odd that there’s no ABC for it. And it’s not just 
that it’s odd, it’s different from almost every other collection-related 
protocol in Python.

I think the only reasonable argument against this is that “old-style” means 
“legacy”, as in you shouldn’t be creating new classes like this. But I don’t 
think that argument is true. There are perfectly good use cases—like your 
infinite sequences—that are perfectly good old-style sequences and are not 
valid Sequences, and how else are you supposed to implement them? (Iteration is 
great, but sometimes random access matters.)

If I’m right about what you’re asking for, I think it’s a useful addition.

Of course the same protocol would accept all kinds of bizarre other things that 
support __getitem__ for different reasons, like the “I want to spell calling 
differently” thing, plus (somewhat less uselessly) typing._GenericAlias 
subclasses like typing.List. But I don’t think that’s a problem. Sure, it’s not 
ideal that your test would accept typing.List, but who’s going to pass the List 
pseudo-type to a function that clearly expects some kind of collection? If they 
get a different exception than they expected (a TypeError a few lines down, 
most likely), who cares? That seems like a consenting adults issue.
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/LPQXOMBHEKSPZZVRDB36U5WFTABBLMCK/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to