functions vs methods

Chris Angelico rosuav at
Sun Jul 22 16:09:24 EDT 2018

On Mon, Jul 23, 2018 at 1:49 AM, MRAB <python at> wrote:
> On 2018-07-22 10:08, Ben Finney wrote:
>> INADA Naoki <songofacandy at> writes:
>>> Please don't refer the FAQ entry.
>>> See this:
>> 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:>,
>>      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.)


More information about the Python-list mailing list