I like the idea of this PEP. I”m very much in favor of adding better repr support, as well as better pprint support. But as that sentence implies, I think those are two separate things.
I’ve often found myself writing __repr__ functions that construct a chrome-plus-argument rendering. It would be lovely to have a protocol that let me just specify the arguments and let it build the correct repr. And even better, something to do what rich’s ‘auto’ does. But in my mind that’s separate from pretty printing, though pretty printing might make use of that information.
As other posters have indicated, what I think you really want is a set of structured data that a formatter such as pprint can pretty print. I’m not sure exactly what that protocol would look like, but the currently specified protocol is not enough by itself; it is too limited and inflexible. I understand you want to limit the scope of the pep, but let’s do it in such a way as to not prevent a more general solution in the future 
I would suggest, as others have, that __pprint__ not be used as the name for the attribute. __rich_repr__ also doesn’t sound right to me, for reasons others have mentioned. Maybe __enrich_repr__. Or how about __getcurrentargs__? We should keep this protocol mentally separate from what it might get used for: it provides structured information, not behavior.
My own use case is the ‘pprint’ method of my TokenList class in email._header_value_parser. This PEP would not help with that implementation. My method is a debugging aid. It’s output is not a simple tree of objects; rather, it contains additional meta-information. It really doesn’t have anything to do with or make any use of repr. Or pprint, for that matter.
To make that method integrate with !p, which I’d love to be able to use on parse tree objects, I think it would be sensible if __pprint__ were speced to return an iterator of strings, with each leading space on a string indicating one level of indent. Then pprint would indent all of them per the current position of the returned object in the pretty print output. If pprint were a builtin, or at least lazily imported, __pprint__ methods could then call pprint on sub-objects to produce the tree it wanted. (Ideally pprint would call whatever pprint was specified by pprint=, but I’m not sure how that would work.)
With that as a protocol, my _pp method wouldn’t need an indent parameter, and wouldn’t need to special case non-TokenLists, it would just do for token in self: yield ' ' + pprint(token) in its inner loop.
My __pprint__proposal isn’t about satisfying the enhanced structured data desire. But it would be useful for some of the use cases mentioned by others (I think?) And it aligns better with what my naive expectation for what the semantics of a __pprint__ special method would be. In fact, I would be/will be very surprised if __pprint__ has any other semantics than “return something for pprint to indent into the pretty print is is creating”.
This does not exclude adding additional protocol methods in the future for more structured data return. Nor does it exclude pprint from using __getcurrentargs__ (or whatever it ends up being called) and/or the equivalent of the rich ‘auto’ decorator and/or any structured data methods defined in the future, if a __pprint__ method hasn’t been defined on the object on which it is called.
Going back to __getcurrentargs__ (or whatever), we could also have a way to tell __repr__ to use this information to construct the repr (without pretty printing), as well as way to tell it to do the auto version. Maybe a from __future__ import to change the default behavior of repr, or at least something like def __repr__(self): return autorepr() (with a better name than autorepr
). Not that I’m suggesting that for this PR!
I don’t object to anything this pep does other than its questionable use of the name __pprint__
I’d also really like the __pprint__ I described above, but its absence wouldn’t be a reason to reject the PEP. What I want to emphasize, though, is that the things that return structured data should be decoupled from the pretty print concepts. Pretty print should use that data, but that data is not pretty print data.