Какова цель подкласса класса «объект» в Python?
-
24-09-2019 - |
Вопрос
Все встроенные на 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 представил «новые классы стиля» У кого есть ряд дополнительных функций относительно классов старых стилей, которые не подклассят объект. Объект подклассов был выбран выбранным способом, чтобы указать, что ваш класс должен быть новым классом стиля, а не старый стиль.