Почему при объявлении класса в Python 2 используется унаследование его от object?
Ситуация достаточно стандартная. Наверное, многие замечали в Django примерно следующую конструкцию:
from django.db import models
class Ox(models.Model):
horn_length = models.IntegerField()
class Meta:
ordering = ["horn_length"]
verbose_name_plural = "oxen"
Мы видим класс Meta, но после него нет наследования от object.
Объясняется все очень просто.
До Python 2.2 классы объявлялись так:
class OldStyle():
pass
Но в новой версии появились фичи, такие как дескрипторы, свойства и многое другое.
Таким образом, в Python 2.2, чтобы использовать для классов новинки, требовалось унаследоваться от object:
class NewStyle(object):
pass
object - это встроенный класс и объект. Экземпляры типа или класса object - это объекты. Более подробно.
В Python 3 старый стиль объявления классов был убран, так что наследоваться от object надо только в Python 2.