Что цель разделить на подклассы является класс “объектом” в Python?

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

52
задан smci 12 August 2012 в 12:02
поделиться

6 ответов

Короче говоря, освобождает волшебных пони.

Долгое время в Python 2.2 и ранее использовались «классы старого стиля». Это была конкретная реализация классов, и у них было несколько ограничений (например, вы не могли создавать подклассы встроенных типов). Исправление состояло в том, чтобы создать новый стиль класса. Но это повлечет за собой некоторые обратно несовместимые изменения. Итак, чтобы убедиться, что код, написанный для классов старого стиля, все еще работает, был создан класс объекта , который действует как суперкласс для всех классов нового стиля. Итак, в Python 2.X, class Foo: pass создаст класс старого стиля, а class Foo (object): pass создаст класс нового стиля.

Более подробно см. Унификация типов и классов в Python 2.2 Гвидо.

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

52
ответ дан 7 November 2019 в 09:31
поделиться

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

О разнице между классами нового стиля и старого стиля смотрите этот вопрос на stackoverflow. Для полной истории: см. эту хорошую статью о типах и объектах Python.

7
ответ дан 7 November 2019 в 09:31
поделиться

Верно, но он отмечает класс как новый класс. Недавно разработанные классы должны использовать базу объекта , потому что это мало стоит и подходит для будущего вашего кода.

3
ответ дан 7 November 2019 в 09:31
поделиться

Это связано с «новым стилем» классов. Подробнее об этом можно прочитать здесь: 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
ответ дан 7 November 2019 в 09:31
поделиться

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

0
ответ дан 7 November 2019 в 09:31
поделиться

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

Подробности находятся в разделе 3.3 документации Python: Классы нового стиля и классические.

0
ответ дан 7 November 2019 в 09:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: