functions vs methods
Chris Angelico
rosuav at gmail.com
Sun Jul 22 16:09:24 EDT 2018
On Mon, Jul 23, 2018 at 1:49 AM, MRAB <python at mrabarnett.plus.com> wrote:
> On 2018-07-22 10:08, Ben Finney wrote:
>>
>> INADA Naoki <songofacandy at 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
More information about the Python-list
mailing list