On Mon, Jul 23, 2018 at 1:49 AM, MRAB <pyt...@mrabarnett.plus.com> wrote: > On 2018-07-22 10:08, Ben Finney wrote: >> >> INADA Naoki <songofaca...@gmail.com> writes: >> >>> Please don't refer the FAQ entry. >>> See this: https://bugs.python.org/issue27671 >> >> >> Interesting. Thanks for raising that bug report. >> >> I offer my text as a starting point for a better explanation: >> >> Because ‘len’ works with *any* sequence, not only lists. To >> implement it as a method of each sequence type, it would have to be >> implemented on each type separately, which is a design that is >> needlessly more complex. >> >> This is common in Python: it uses so-called “duck typing” >> <URL:https://docs.python.org/3/glossary.html#term-duck-typing>, >> where the way an object behaves is more important than its type. >> Because “what is the length of this object” is a question valid for >> a broad variety of types, the design decision was made to allow it >> to accept any type for which that query makes sense. >> >> Feel free to use that (or something derived from it) to improve the >> documentation as you suggest. >> > Doesn't it have to be implemented on each type anyway?
Not always. If you have an actual protocol like __len__, then yes, but there are many protocols that cover multiple functions. For instance, once you define __add__, you can perform addition with your object - both "x + 1" and "1 + x", and even "x += 1". And once you define __iter__, all manner of things suddenly start working. (That's probably the biggest one.) ChrisA -- https://mail.python.org/mailman/listinfo/python-list