On Sat, May 14, 2016 at 2:05 AM, Brett Cannon <email@example.com> wrote:
> On Fri, 13 May 2016 at 15:09 Koos Zevenhoven <firstname.lastname@example.org> wrote:
>> On Fri, May 13, 2016 at 11:50 PM, Ethan Furman <email@example.com> wrote:
>> > On 05/13/2016 01:30 PM, Koos Zevenhoven wrote:
>> >> It turns out it has been almost a month since this, and the PEP draft
>> >> is already looking good. It seems we might now be ready to discuss it.
>> >> Should we add the generic type FSPath[str]?
>> > Guido's post on one of the other threads:
>> > ----------------------------------------
>> >> There's no need for typing.PathLike.
>> > So I'm gonna say no. ;)
>> Oh, it looks like a read those two emails in the wrong order ;).
>> Anyway, I was going to suggest making the abstract base class
>> subscriptable too like this: PathABC[str] is a str-based path ABC, and
>> PathABC[bytes] a bytes-based one ;). I don't know if that should be
>> called a generic type or not, though.
> The PEP already addresses this and says "no".
I obviously know the PEP very well, and it doesn't. But I'm probably
just doing a bad job explaining what I mean right now, and should
probably go to bed. Sorry.
Ah, I now see what you're proposing: somehow making the ABC a generic like the generics types in the typing module are (which would be a new feature for ABCs and why I didn't realize what you were initially asking for; sorry about that). The answer is still "no". :)
The generics support from the typing module is specific to that module and not applicable to ABCs themselves. Think of ABCs as helping guarantee that you implement specific methods and attributes. If your typing needs are met simply by that level of type information, then ABCs are fine as a type hint. But if you need something more specific like generics support then that's when it goes into the typing module (IOW don't think of the types in the typing module as ABCs or vice-versa but as separate things both dealing with duck-typing for their own purposes). Since the PEP already ruled out adding generics support for a special type representing os.PathLike or path-like objects, that also means it shouldn't be pushed into the ABC as an end-run around not going into the typing module.