On Mon, Nov 29, 2021 at 6:01 AM Christopher Barker <python...@gmail.com> wrote: > Hmm -- I jsut had a whacky idea: > > As pointed out, adding a bunch of chaining methods to the Iterator ABC isn't > really helpful, as it would A) potentially break / override existing classes > that happen to use teh same names, and B) not provide anything for Iterators > that don't subclass from the ABC. > > But we *could* define a new ChainedIterator ABC. Anyone could then subclass > from it to get the chaining behavior, and we could (potentially) use it for > many of the iterators in the stdlib. > > I'm not sure I'd even support this, but it's an idea. >
I wouldn't support it. One of the great things about Python is that it's fairly easy to teach this progression: 1) Here's how you can do stuff in a generic way 2) Here's how you can make your own thing fit that generic way 3) Now your thing can be used by anyone else using #1 For example: 1) 1 + 2, "sp" + "am" 2) __add__ (don't worry about teaching __radd__ initially) 3) Demo() + 3 Or: 1) @lru_cache def foo(x, y) 2) def newdeco(f) 3) @newdeco def foo(x, y) Or use one with another: 1) with open(x) as f: ... 2) @contextlib.contextmanager def spaminate(x) 3) with spaminate(x) as spam: ... And this works because the simple approach IS the way to completely fit in with the protocol. Most Python protocols consist of *one* dunder method on a class. Some require two, or there are a couple that interact with each other (__eq__ and __hash__, for instance), but still, two methods isn't huge. Requiring that someone subclass an ABC as well as defining __iter__ would increase that complexity. Sometimes - in fact, often - you won't notice (because regular iteration still works), and if you subclass something else that subclasses it, no problem. But if you subclass something that happens to have a method name that collides, now you have a problem, and the order of inheritance will matter. But hey. Ideas are great, and figuring out a way to work within the existing structure would be awesome. I have a suspicion it's not possible, though, and it might just be that pipeline programming will end up needing syntactic support. ChrisA _______________________________________________ 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/GUCEBDUJR4KRP725I6XFKJHOVKLG5WQD/ Code of Conduct: http://python.org/psf/codeofconduct/