Функция type() Python [с простыми примерами]

Мы используем функцию type() в Python для определения типа конкретного объекта Python. Это очень простая функция и легкая для понимания. Без лишних слов, перейдем к синтаксису.

Синтаксис функции type() в Python

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

Синтаксис функции type() в Python выглядит следующим образом:

type(object)

type(name, bases, dict)

Когда функции type() передается один аргумент, она возвращает тип объекта. Его значение совпадает с значением переменной экземпляра object.__class__.

Когда передаются три аргумента, функция возвращает новый объект типа. Она используется для динамического создания класса на лету.

  • Строка “name” становится именем класса. Она совпадает с атрибутом __name__ класса.
  • Кортеж “bases” указывает базовые классы. Он совпадает с атрибутом __bases__ класса.
  • Словарь “dict” помогает создать тело класса. Он совпадает с атрибутом __dict__ класса.

Примеры функции type() в Python

Давайте рассмотрим некоторые примеры использования функции type().

1. Определение типа объекта в Python

x = 10
print(type(x))

s = 'abc'
print(type(s))

from collections import OrderedDict

od = OrderedDict()
print(type(od))

class Data:
    pass

d = Data()
print(type(d))

Вывод:

<class 'int'>
<class 'str'>
<class 'collections.OrderedDict'>
<class '__main__.Data'>

Обратите внимание, что функция type() возвращает тип объекта с именем модуля. Поскольку наш сценарий Python не имеет модуля, его модулем становится __main__.

2. Извлечение данных из классов Python

Предположим, у нас есть следующие классы. Мы извлечем метаданные о классах, используя свойства class, bases, dict и doc.

class Data:
    """Data Class"""
    d_id = 10


class SubData(Data):
    """SubData Class"""
    sd_id = 20

Давайте выведем некоторые свойства этих классов.

print(Data.__class__)
print(Data.__bases__)
print(Data.__dict__)
print(Data.__doc__)

print(SubData.__class__)
print(SubData.__bases__)
print(SubData.__dict__)
print(SubData.__doc__)

Вывод:

<class 'type'>
(<class 'object'>,)
{'__module__': '__main__', '__doc__': 'Data Class', 'd_id': 10, '__dict__': <attribute '__dict__' of 'Data' objects>, '__weakref__': <attribute '__weakref__' of 'Data' objects>}
Data Class

<class 'type'>
(<class '__main__.Data'>,)
{'__module__': '__main__', '__doc__': 'SubData Class', 'sd_id': 20}
SubData Class

Мы можем создавать аналогичные классы с использованием функции type().

Data1 = type('Data1', (object,), {'__doc__': 'Data1 Class', 'd_id': 10})
SubData1 = type('SubData1', (Data1,), {'__doc__': 'SubData1 Class', 'sd_id': 20})

print(Data1.__class__)
print(Data1.__bases__)
print(Data1.__dict__)
print(Data1.__doc__)

print(SubData1.__class__)
print(SubData1.__bases__)
print(SubData1.__dict__)
print(SubData1.__doc__)

Вывод:

<class 'type'>
(<class 'object'>,)
{'__doc__': 'Data1 Class', 'd_id': 10, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Data1' objects>, '__weakref__': <attribute '__weakref__' of 'Data1' objects>}
Data1 Class

<class 'type'>
(<class '__main__.Data1'>,)
{'__doc__': 'SubData1 Class', 'sd_id': 20, '__module__': '__main__'}
SubData1 Class

Обратите внимание, что мы не можем создавать функции в динамическом классе с использованием функции type().

Применение функции type() в реальной жизни

Python – это язык с динамической типизацией. Поэтому, если мы хотим узнать тип аргументов, мы можем использовать функцию type(). Если вы хотите убедиться, что ваша функция работает только с определенными типами объектов, используйте функцию isinstance().

Предположим, мы хотим создать функцию для вычисления чего-то на двух целых числах. Мы можем реализовать это следующим образом.

def calculate(x, y, op='sum'):
    if not(isinstance(x, int) and isinstance(y, int)):
        print(f'Invalid Types of Arguments - x:{type(x)}, y:{type(y)}')
        raise TypeError('Incompatible types of arguments, must be integers')
    
    if op == 'difference':
        return x - y
    if op == 'multiply':
        return x * y
    # по умолчанию - сумма
    return x + y

Функция isinstance() используется для проверки типа входного аргумента. Функция type() используется для вывода типа параметров в случае неудачной проверки.

Ссылки

Source:
https://www.digitalocean.com/community/tutorials/python-type