Какой базовый класс по умолчанию у классов в Python?

Ответ

В Python 3 любой класс, у которого явно не указан родитель, по умолчанию неявно наследуется от базового класса object.

Это обеспечивает классу доступ к фундаментальным методам, таким как __init__, __str__, __repr__ и другим, формируя основу объектной модели Python.

Пример:

# Этот класс неявно наследуется от object
class MyClass:
    pass

# Это эквивалентная, но более явная запись
class MyClassExplicit(object):
    pass

# Проверка подтверждает наследование
print(issubclass(MyClass, object))
# Вывод: True

Исторический контекст: Это поведение стало стандартом в Python 3. В Python 2 для создания классов "нового стиля" (new-style classes), которые наследуются от object, требовалось явное указание: class MyClass(object):. Классы без этого наследования назывались классами "старого стиля" и имели другую модель поведения.

Ответ 18+ 🔞

А, слушай, вот эта тема с классами в питоне — она же, блядь, как история про Герасима и Муму, только про программирование. Всё просто, но пока не вникнешь — нихуя не понятно.

Так вот, представь себе: пишешь ты класс, такой обычный, ни от кого не наследуешь, вроде бы сирота. А на самом деле, сука, у него есть тайный папаша — класс object. Прямо как в жизни, блядь, все мы от кого-то произошли, хоть и не всегда помним.

В третьем питоне это вообще, блядь, ебушки-воробушки — всё автоматически. Написал class MyClass: и всё, ты уже в благородной семье object. А раньше, в питоне втором, была жопа. Там надо было специально писать (object), иначе получался какой-то убогий класс старого стиля, который нихуя не умел и вел себя как мартышлюшка.

# Вот так сейчас — и уже всё работает, блядь, как часы.
class MyClass:
    pass

# А это для параноиков, которые любят всё явно. Типа "я не верю, пока не увижу `object`".
class MyClassExplicit(object):
    pass

# Проверяем, не обманывают ли нас
print(issubclass(MyClass, object))
# Вывод: True — да, сука, родня!

Вот и вся магия, ёпта. Не надо голову ломать. Просто знай, что где-то там, на самом верху иерархии, сидит этот object и всем раздает базовые способности — __init__, __str__ и прочую хуйню, без которой класс — не класс, а так, куча бесполезного кода. Чистая формальность, но важная, блядь. Как печать в паспорте. Без неё — ты не человек, а так, ходячая проблема.