Подтвердить что ты не робот

Какова цель подкласса класса "объект" в Python?

Все встроенные модули Python являются подклассами object, и я сталкиваюсь со многими определенными пользователем классами, которые тоже. Зачем? Какова цель класса object? Это просто пустой класс, верно?

4b9b3361

Ответ 1

Короче говоря, он устанавливает свободные магические пони.

В долгосрочной перспективе Python 2.2 и ранее использовали "классы старого стиля". Они были особой реализацией классов, и у них было несколько ограничений (например, вы не могли создавать классы подкласса). Исправить это было создание нового стиля класса. Но, это будет связано с некоторыми изменениями, несовместимыми в обратном направлении. Поэтому, чтобы убедиться, что код, написанный для классов старого стиля, по-прежнему будет работать, класс object был создан, чтобы выступать в качестве суперкласса для всех классов нового стиля. Итак, в Python 2.X class Foo: pass создаст класс старого стиля, а class Foo(object): pass создаст новый класс стиля.

Дольше см. Guido Объединять типы и классы в Python 2.2.

И, в общем, неплохо привыкнуть к тому, чтобы все ваши классы стали новыми, потому что некоторые вещи (декоратор @property - это тот, который приходит на ум) не будут работать со старым стилем классы.

Ответ 2

Краткий ответ: подклассификация object эффективно делает его классом нового стиля (обратите внимание, что это не нужно, поскольку автоматическое в Python 3.x)

За разницу между классами new style и old style: см. этот вопрос о стеке_потока. Для полной истории: см. эта хорошая запись в типах и объектах Python.

Ответ 3

Это связано с "новым стилем" классов. Подробнее об этом можно прочитать здесь: http://docs.python.org/tutorial/classes.html#multiple-inheritance, а также здесь: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes

Использование классов нового стиля позволит вам использовать "новые, универсальные функции Python, такие как __slots__, дескрипторы, свойства и __getattribute __()."

Ответ 4

Правильно, но он отмечает класс как класс new-style. Вновь разработанные классы должны использовать базу object, потому что она не требует больших затрат и надежды на будущее.

Ответ 5

Краткая версия состоит в том, что классическим классам, которым не нужен суперкласс, были ограничения, которые нельзя было обойти, не разбирая много старого кода. Таким образом, они создали концепцию классов нового стиля, которые являются подклассом из object, и теперь вы можете делать классные вещи, такие как определение свойств, а подклассификация dict больше не является упражнением в боли и странными ошибками.

Подробности приведены в разделе 3.3 документов Python: Новые и классические классы.

Ответ 6

Python 2.2 представил "новые классы стиля" , который имел ряд дополнительных функций по сравнению со старыми классами стилей, которые не подкласса объекта. Объект Subclasses был выбранным способом указать, что ваш класс должен быть новым классом стиля, а не старинным.