Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

Для разницы между new style классы и old style Классы: см Этот вопрос стойки. Отказ Для полной истории: см. Это хорошая перезагрузка на типов и объектах Python.

Это связано с «новым стилем» классов. Вы можете прочитать больше об этом здесь: http://docs.cython.org/tutorial/Classes.html#multiple-heritance. А также здесь: http://docs.cython.org/reference/Datamodel.html#new-style-andlassic-classes.

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

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

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

Детали в разделе 3.3 Документов Python: Ново-стиль и классические классы.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top