Вопрос по python – class Classname (object), какое слово является «объектом» в Python?

28

Когда я создаю модуль с его единственным содержанием:

<code>class Classname(randomobject):
    pass
</code>

И я пытаюсь запустить файл .py модуля, интерпретатор говорит, чтоrandomobject не определено.

Но, когда я делаю:

<code>class Classname(object):
    pass
</code>

Модуль работает просто отлично. Так что еслиobject это не ключевое слово, тогда что это?

Для записи,stackoverflow.com/q/4015417/404469 не дубликат Речь идет о механизме наследования; этот вопрос о синтаксической структуре происходящего и имеет несколько ответов. Marcin
Вот еще один вопрос, который касается Pythonobject идентификатор:python class inherits object. gary

Ваш Ответ

3   ответа
14

object является (глобальной) переменной. По умолчанию он связан со встроенным классом, который является корнем иерархии типов.

(Это приводит к интересному свойству, которое вы можете взять любой встроенный тип, и использовать__bases__ свойство для достижения типа, называемого объектом).

Все встроенное, что не является ключевым словом или оператором, является идентификатором.

@ Bentley4 Я не знаю, что ты имеешь в виду.
Спасибо. Я предполагаю, что вы не можете просмотреть код, который присваивается этой глобальной переменной? Bentley4
Я извиняюсь. В /usr/lib/python2.7 вы можете найти стандартные модули Python. Открыв сами файлы python, вы можете увидеть назначения переменных, тела классов, функций и т. Д. Модулей, которые вы можете увидеть с помощью функции справки. Есть ли способ получить доступ кbuiltin модуль и посмотреть на переменную объекта в этом модуле? Bentley4
@ Bentley4 Я никогда не пробовал. Подумайте об этом если нет, вам придется найти его в источнике C.
6

object это идентификатор, который ссылается на встроенный тип.

В отличие от многих других языков, в Python нет примитивных типов. Все является объектом, включая все типы данных.

Я не уверен, почему вы ожидали наследования отrandomobject работать.

Возможно, я не совсем понял; я имею ввиду этоobject не имеет особого синтаксического или семантического значения в Python, как, скажем,int делает в Java.
Обновленный ответ, чтобы отразить это.
Строго говоря, типом слова "объект" является "quot; переменная, по этой причине.
2

object является базовым классом, от которого вы наследуете при создании класса нового стиля в Python 2.

Спасибо за напоминание.
В Python 3 все классы все еще наследуются от объекта. Кроме того, "типом слова, которым является объект" является & quot; это идентификатор.
Однако это не обязательно делать в Python 3.x. Классы нового стиля по умолчанию.

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