Класс Classname(object): что такое 'object' в Python?
Я создал модуль, содержимое которого выглядит следующим образом:
class Classname(randomobject):
pass
Когда я пытаюсь запустить .py файл этого модуля, интерпретатор выдает ошибку, что randomobject
не определен.
Однако, если я пишу так:
class Classname(object):
pass
то модуль работает без проблем. Если object
не является зарезервированным словом, тогда что это за сущность?
3 ответ(ов)
object
— это (глобальная) переменная. По умолчанию она ссылается на встроенный класс, который является корнем иерархии типов.
Это приводит к интересному свойству: вы можете взять любой встроенный тип и использовать свойство __bases__
, чтобы добраться до типа, называемого object
.
Все встроенные элементы, которые не являются ключевыми словами или операторами, представляют собой идентификаторы.
object
— это идентификатор, который ссылается на встроенный тип.
В отличие от многих других языков, в Python нет примитивных типов. Все является объектом, включая все типы данных.
Я не совсем понимаю, почему вы ожидали, что наследование от randomobject
сработает.
В Python 2 object
является базовым классом, от которого вы унаследуете, создавая новый стиль класса. В отличие от старого стиля классов, которые не наследуют от object
, новые стиль классы предоставляют более мощные механизмы, такие как метаклассы и более унифицированную модель объектов. Чтобы создать новый стиль класс, просто укажите object
в качестве родительского класса:
class MyClass(object):
pass
Таким образом, начиная с Python 2.2, рекомендуется использовать новое стиль классов для большей совместимости и функциональности.
Вызов функции модуля по его имени (строке)
Почему классы в Python наследуют от object?
Как преобразовать вложенный словарь Python в объект?
В чем разница между __init__ и __call__?
"_set" в объекте queryset в Django