Базовый тип. Прародитель других встроенных и пользовательских типов данных. Конструктор для динамических пользовательских типов.
type(obj) / type(name, bases, dict)
Один аргумент:
obj -- Объект, тип которого требуется определить.

Три аргумента:
name -- Имя для создаваемого типа (становится атрибутом '__name__');
bases -- Кортеж с родительскими классами (становится атрибутом '__bases__');
dict -- Словарь, который будет являться пространством имён для тела класса (становится атрибутом '__dict__').

Типы данных определяют способности своих объектов (аспекты поведения) и возможные значения для них.

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

Встроенные типы перечислены в модуле types.

Пользовательские типы данных могут быть сконструированы налету (во время исполнения) при помощи вызова type() (с тремя аргументами) или определены в коде, например при помощи инструкции class. Так для последнего примера понятия класс и тип являются синонимами.

Объекты (экземпляры классов) обладают тремя базовыми характеристиками:

  • идентификатором;
  • типом;
  • значением.

Идентификатор
Сущность, характеризующая объект, неизменна на протяжении всего периода существования объекта. Можно считать, что это адрес объекта в памяти. Идентичность двух объектов (по сути равенство идентификаторов) можно проверить при помощи оператора is. Получить идентификатор объекта можно при помощи функции id().

Тип
Как было сказано выше, тип данных определяет способности своих объектов и возможные значения для них. Подобно идентификатору тип остаётся неизменным на протяжении всего периода существования объекта. Получить тип объекта можно при помощи вызова type() с одним аргументом.

Значение
Если значение объекта может меняться, то объект называется изменяемым, если не может — неизменяемым. Изменяемость определяется типом: так числа, строки и кортежи - неизменяемы, в то время как словари и списки — изменяемы.

Внимание
Значение неизменяемого контейнера, содержащее ссылку на изменяемый объект, конечно, может меняться, когда этот объект изменяется. Однако сам контейнер, тем не менее, считается неизменяемым, потому как идентичность изменяемого объекта при этом не меняется (например, кортеж вполне может содержать [ссылку на] изменяемый объект).

Вызовы type

1. Вызов type() с одним аргументом позволяет получить тип указанного [аргументом] объекта (обычно возвращается тот же тип, что хранится в атрибуте объекта __class__). Однако для проверки соответствия типа объекта какому-либо типу (или нескольким) рекомендуется воспользоваться функцией isinstance(), ввиду того, что она принимает во внимание иерархию типов.

    my_var = 1
type(my_var) # < type 'int' >

2. +py2.2 Вызов type() с тремя аргументами позволяет сконструировать тип во время исполнения.

    # Определение типа при помощи инструкции class
class MyType: # Для Python 2 - MyType(object)
a = 1

# То же определение типа, но во время исполнения при помощи type()
MyType = type('MyType', (object,), {'a': 1})

Синонимы поиска: классы, типы, istype

Нет обсуждений для отображения.
Если у вас есть, что сказать, можете представиться и исправить ситуацию.