Является ли «тип» функцией или классом? - PullRequest
2 голосов
/ 16 февраля 2020

Меня немного смущает вопрос type, поскольку он указан во встроенных функциях в документации Python .

Однако, когда я запускаю type(type) и type.__dict__ это больше похоже на вызываемый класс. Помимо этого вызова isinstance(type, type) возвращает True. Что происходит?

Ответы [ 3 ]

2 голосов
/ 16 февраля 2020

type - это класс, он же тип - термины в основном эквивалентны в Python 3, хотя модуль typing ввел отдельное, слегка несовместимое использование слова «тип».

Он задокументирован под «встроенными функциями», потому что это самое ясное место для документирования того, что он делает, когда вы вызываете его как функцию. Есть множество типов, документированных там. Если вы посмотрите вверху страницы, то увидите

Интерпретатор Python имеет ряд функций и встроенных в него типов , которые всегда доступны. Они перечислены здесь в алфавитном порядке.

1 голос
/ 19 февраля 2020

У меня нет репутации, чтобы комментировать. Пожалуйста, обратитесь к следующему вопросу: Встроенный тип ключевого слова означает функцию или класс в python?

1 голос
/ 17 февраля 2020

type это тип. Это метакласс других встроенных типов (включая самого себя)

>>> type(int)
<class 'type'>
>>> type(type)
<class 'type'>

, а также метакласс по умолчанию для пользовательских типов:

>>> class A: pass
...
>>> type(A)
<class 'type'>

При вызове с одним аргументом (как в предыдущих примерах) возвращает тип своего аргумента. При вызове с тремя аргументами (имя, кортеж базовых классов и dict) он возвращает новый экземпляр type, как и следовало ожидать при вызове типа.

>>> B = type('B', (A,), {'x': 3})
>>> type(B)
<class 'type'>
>>> B.x
3

Фактически, оператор class является декларативным синтаксисом для вызова type. Предыдущее эквивалентно

class B(A):
    x = 3    
...