2015-12-04 5 views
3

This site перечисляет type() как встроенные функции в Python. Однако, когда я проверить это, кажется, из «типа» типа:Является ли тип() встроенной функцией?

>>> type(dir) 
<type 'builtin_function_or_method'> 
>>> type(id) 
<type 'builtin_function_or_method'> 
>>> type(abs) 
<type 'builtin_function_or_method'> 
>>> type(type) 
<type 'type'> 

Мне кажется, что type() является встроенной функцией, которая возвращает тип аргумента. Я пытаюсь проверить это с помощью:

>>> a = type(type) 
>>> type(a) 
<type 'type'> 
>>> type(1) 
<type 'int'> 
>>> type(type(1)) 
<type 'type'> 

Что мне здесь не хватает? Является ли type() просто конструктором класса type, из которого наследуются все остальные объекты?

+0

тип - это класс в встроенном модуле, а также встроенная функция –

ответ

4

Да. type() - функциональный объект, который возвращает тип объекта, а также класс, который служит базовым метаклассом для всех классов (а не базового класса, но закрывается). Он отличает две функции от количества переданных ему аргументов. Один аргумент возвращает тип этого аргумента. Три аргумента, и он возвращает класс, построенный из этих аргументов.

(Метакласс класс класса. Так же, как и обычные объекты являются экземплярами некоторого класс, который является экземпляром метакласса.)

Это так по историческим причинам. Первоначально это была просто функция, которая получила тип объекта. В Python 2.2, когда встроенные типы и пользовательские классы были унифицированы, он стал базовым метаклассом. Однако для обеспечения обратной совместимости функциональность старого type() была сохранена как часть класса .

+0

Спасибо, история освещается. – Will

Смежные вопросы