I’m a bit surprised by Python’s extensive use of ‘magic methods’.
For example, in order for a class to declare that instances have a "length", it implements a __len__ method, which it is called when you write len(obj). Why not just define a len method which is called directly as a member of the object, e.g. obj.len()?
See also: Why does Python code use len() function instead of a length method?
AFAIK,
lenis special in this respect and has historical roots.Here’s a quote from the FAQ:
The other “magical methods” (actually called special method in the Python folklore) make lots of sense, and similar functionality exists in other languages. They’re mostly used for code that gets called implicitly when special syntax is used.
For example:
and so on…