2015-08-26 23 views
2
>>> type(type) 
<type 'type'> 

Я ожидаю, что тип type будет функцией, так как он используется для возврата типа аргумента. Означает ли это, что тип может принимать аргументы? Есть type Что-то необычное/специальное?Что такое 'type' в Python?

ответ

1

type является классом ур-типа Python. Когда вызывается с единственным аргументом, он возвращает тип аргумента. Когда вызывается с 3 аргументами, он возвращает класс, характеристики которого определяются аргументами.

+0

Что такое «Ур-типа»? – user2864740

+0

@ user2864740: Это тип всех других типов. –

1

Как можно ясно увидеть в documentations -

типа класса (объекта)
типа класса (имя, баз, ДИКТ)

С одним аргументом, возвращает тип объекта. Возвращаемое значение представляет собой объект типа. Встроенная функция isinstance() рекомендуется для тестирования типа объекта.

type - это класс, а не функция.

4

Классы - объекты. Все объекты являются экземплярами класса. Так как класс является объектом, он является экземпляром некоторого класса. Класс, который является экземпляром класса, называется type. Это база metaclass.

Первоначально type() был просто функцией, которая возвращала класс объекта. В Python 2.2 пользовательские классы и встроенные типы были unified, а type стал классом. Для обратной совместимости он по-прежнему ведет себя как старая функция type() при вызове с одним аргументом.

5

typemetaclass: класс, экземпляры которого также являются классами. Тип любого другого встроено класса также будет type - например:

>>> type(object) 
<class 'type'> 
>>> type(list) 
<class 'type'> 

Действительно, каждый (новый стиль) класс также будет экземпляром type, хотя, если она определена с помощью пользовательского метакласса, type(my_class) будет быть метаклассом. Но так как каждый метаклассом требуется, чтобы наследовать от type, вы будете иметь для любого класса:

>>> isinstance(my_class, type) 
True