Недавно я играл с Python, и одна вещь, которую я нахожу немного странной, - это широкое использование "магических методов", например. чтобы сделать свою длину доступной, объект реализует метод def __len__(self), а затем вызывается при написании len(obj).
Мне просто интересно, почему объекты не просто определяют метод len(self) и вызывают его непосредственно как член объекта, например. obj.len()? Я уверен, что для Python должны быть веские причины делать это так, как это делается, но как новичок я еще не разработал, что они еще.