Почему при объявлении класса в 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):
passobject - это встроенный класс и объект. Экземпляры типа или класса object - это объекты. Более подробно.
В Python 3 старый стиль объявления классов был убран, так что наследоваться от object надо только в Python 2.