Функция type()
служит для получения типа объекта в языке программирования Python.
Синтаксис:
type(object)
type(name, bases, dict)
Аргументы:
- Если в функцию
type()
передается один аргумент, то она возвращает тип объекта. - Когда в функцию
type()
передаются три аргумента, он возвращает объект нового типа. Таким образом, создаются динамические классы.- Строка
name
становится именем класса. То же, что и атрибут__name__
класса. - Кортеж
base
определяет базовые классы. То же, что и атрибут__bases__
класса. - Словарь
dict
используется для создания тела класса. То же, что и атрибут__dict__
класса.
- Строка
Давайте рассмотрим примеры с использованием функции type()
:
import datetime
# Объявим переменную int
a = 25
print(type(a))
# Объявим переменную строку
string = 'АБВГДЕЁЖ'
print(type(string))
# Объявим класс
class Person:
pass
p = Person()
print(type(p))
# Объявим список
num_list = [24, 29, 25, 30]
print(type(num_list))
# Объявим получение сегодняшней даты и времени
now = datetime.datetime.now()
print(type(now))
Результаты:
>>> <class 'int'>
>>> <class 'str'>
>>> <class '__main__.Person'>
>>> <class 'list'>
>>> <class 'datetime.datetime'>
Примечание: функция type()
возвращает объект с именем модуля. В случае с классом у нас нет модуля, поэтому выводится __main__
.
Создание динамических классов
Допустим у нас есть обычные классы:
class Person:
"""Person Class"""
name = 'Vladislav'
class Student(Person):
"""Student Class"""
course = 4
print(Person.__class__, Person.__bases__, Person.__dict__, Person.__doc__)
print(Student.__class__, Student.__bases__, Student.__dict__, Student.__doc__)
Получим результат:
>>> <class 'type'> (<class 'object'>,) {'__module__': '__main__', '__doc__': 'Person Class', 'name': 'Vladislav', '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>} Person Class
>>> <class 'type'> (<class '__main__.Person'>,) {'__module__': '__main__', '__doc__': 'Student Class', 'course': 4} Student Class
А теперь создадим тоже самое с помощью функции type()
Person = type('Person', (object,), {'__doc__': 'Person Class', 'name': 'Vladislav'})
Student = type('Student', (Person,), {'__doc__': 'Student Class', 'course': 4})
print(Person.__class__, Person.__bases__, Person.__dict__, Person.__doc__)
print(Student.__class__, Student.__bases__, Student.__dict__, Student.__doc__)
Результат:
>>> <class 'type'> (<class 'object'>,) {'__doc__': 'Person Class', 'name': 'Vladislav', '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>} Person Class
>>> <class 'type'> (<class '__main__.Person'>,) {'__doc__': 'Student Class', 'course': 4, '__module__': '__main__'} Student Class
Примечание: мы не можем создавать функции в динамическом классе с помощью type()