Ответ 1
В Python 2.x, когда вы наследуете "объект", вы являетесь классом "новый стиль", который был реализован обратно в Python 2.2 (около 2001 года). Неверяющий из "объекта" случай создает "старый" стиль ", который фактически поддерживался только для обратной совместимости.
Большим преимуществом классов "нового стиля" является унификация типов на Python - до этого нельзя было подклассифицировать встроенные типы, такие как int, list, dict, правильно. Был также указан "протокол дескриптора", который описывает протокол для извлечения и установки атрибутов в объекте, что дает языку большую гибкость. (Это более заметно, если вы используете свойство Python в классе).
В чем разница, на самом деле не наследуется от объекта, но поскольку классы в Python также являются объектами, это действительно изменяет класс class (класс класса известен как его "метакласс" ). Таким образом, если вы установите метакласс как "тип", вам не нужно наследовать от объекта, чтобы иметь новый класс стиля.
Настоятельно рекомендуется , что в Python 2.x все ваши классы являются новым стилем - использование классов старого стиля может работать в некоторых простых случаях, но они могут генерировать много тонких, сложных найти, ошибки, когда вы пытаетесь использовать свойства, рассол, дескрипторы и другие дополнительные функции. Прежде всего, когда вы пытаетесь проверить "тип" объекта, он будет таким же (тип "экземпляр" ) для всех объектов из классов старого стиля, даже если они из разных пользовательских классов.
В версиях Python 3.x все классы являются новым стилем - не нужно устанавливать метакласс.
Документация Python "datamodel" - это "книга права", в которой поведение обоих class typess определяется подробно (достаточно, чтобы можно было переопределить язык):
http://docs.python.org/reference/datamodel.html
Это сообщение в блоге от Guido рассказывает о мотивах новых классов стиля на более легком языке:
http://python-history.blogspot.com.br/2010/06/new-style-classes.html