Python - это язык, который поддерживает объектно-ориентированное кодирование, но он намеренно не является чисто ОО-языком. Как вы правильно заметили, классы Python, даже определенные пользователем, не всегда являются производными от одного базового класса.
Функции являются основной единицей функциональности в Python, поэтому имеет смысл, чтобы основные операции (случайный пример: str, dir, print, hash) выглядели как функции.