types
— Создание динамического типа и имена для встроенных типов¶
Этот модуль определяет служебные функции для помощи в динамическом создании новых типов.
Он также определяет имена для некоторых типов объектов, которые используются
стандартным интерпретатором Python, но не отображаются как встроенные функции,
такие как int
или str
.
В завершение, он предоставляет некоторые дополнительные служебные классы и функции, относящиеся к типам, которые недостаточно фундаментальны для встроенных функций.
Динамическое создание типа¶
-
types.
new_class
(name, bases=(), kwds=None, exec_body=None)¶ Динамически создаёт объект класса с использованием соответствующего метакласса.
Первые три аргумента — это компоненты, составляющие заголовок определения класса: имя класса, базовые классы (по порядку), ключевые аргументы (например,
metaclass
).Аргумент exec_body — это обратный вызов, который используется для заполнения только что созданного пространства имён класса. Он должен принять пространство имён класса в качестве единственного аргумента и обновить пространство имён напрямую с помощью содержимого класса. Если обратный вызов не предоставлен, то это эквивалентно передаче
lambda ns: ns
.Добавлено в версии 3.3.
-
types.
prepare_class
(name, bases=(), kwds=None)¶ Вычисляет соответствующий метакласс и создаёт пространство имён класса.
Аргументы — это компоненты, составляющие заголовок определения класса: имя класса, базовые классы (по порядку) и ключевые аргументы (например,
metaclass
).Возвращаемое значение — тройка:
metaclass, namespace, kwds
metaclass — это соответствующий метакласс, namespace — это подготовленное пространство имён класса, а kwds — это обновленная копия переданного аргумента kwds с удаленной любой записью
'metaclass'
. Если аргумент kwds не передан, это будет пустой dict.Добавлено в версии 3.3.
Изменено в версии 3.6: Значение по умолчанию для элемента
namespace
возвращенного кортежа изменилось. Теперь используется отображение с сохранением порядка вставки, когда у метакласса нет метода__prepare__
.
См.также
- Метаклассы
- Полная информация о процессе создания класса, поддерживаемого этими функциями
- PEP 3115 — Метаклассы в Python 3000
- Добавлен хук пространства имён
__prepare__
-
types.
resolve_bases
(bases)¶ Разрешить MRO записи динамически, как указано в PEP 560.
Функция ищет элементы в bases, которые не являются экземплярами
type
, и возвращает кортеж, в котором каждый такой объект, имеющий метод__mro_entries__
, заменяется распакованным результатом вызова этого метода. Если элемент bases является экземпляромtype
или у него нет метода__mro_entries__
, то он включается в возвращаемый кортеж без изменений.Добавлено в версии 3.7.
См.также
PEP 560 — основная поддержка для модуля типизации и универсальных типов
Стандартные типы интерпретатора¶
Этот модуль предоставляет имена для многих типов, которые требуются для
реализации интерпретатора Python. Он намеренно избегает включения некоторых
типов, которые возникают случайно во время обработки, например типа
listiterator
.
Обычно эти имена используются для проверок isinstance()
или
issubclass()
.
Если вы создаёте экземпляр любого из этих типов, обратите внимание, что сигнатуры могут различаться в разных версиях Python.
Стандартные имена определены для следующих типов:
-
types.
FunctionType
¶ -
types.
LambdaType
¶ Тип пользовательских функций и функций, созданных
lambda
выражениями.Вызывает событие аудита
function.__new__
с аргументомcode
.Событие аудита возникает только для прямого создания экземпляров функциональных объектов и не возникает при нормальной компиляции.
-
types.
AsyncGeneratorType
¶ Тип объектов асинхронный генератор-итератор, созданных функциями асинхронного генератора.
Добавлено в версии 3.6.
-
class
types.
CodeType
(**kwargs)¶ Тип для объектов кода, например, возвращаемых
compile()
.Вызывает событие аудита
code.__new__
с аргументамиcode
,filename
,name
,argcount
,posonlyargcount
,kwonlyargcount
,nlocals
,stacksize
,flags
.Обратите внимание, что проверенные аргументы могут не соответствовать именам или позициям, требуемым инициализатором. Событие аудита возникает только для прямого создания экземпляров объектов кода и не возникает для нормальной компиляции.
-
replace
(**kwargs)¶ Возвращает копию объекта кода с новыми значениями для указанных полей.
Добавлено в версии 3.8.
-
-
types.
CellType
¶ Тип для объектов ячеек: такие объекты используются как контейнеры для свободных переменных функции.
Добавлено в версии 3.8.
-
types.
MethodType
¶ Тип методов экземпляров пользовательского класса.
-
types.
BuiltinFunctionType
¶ -
types.
BuiltinMethodType
¶ Тип встроенных функций, таких как
len()
илиsys.exit()
, и методы встроенных классов. (Здесь термин «встроенный» означает «написанный на C».)
-
types.
WrapperDescriptorType
¶ Тип методов некоторых встроенных типов данных и базовых классов, таких как
object.__init__()
илиobject.__lt__()
.Добавлено в версии 3.7.
-
types.
MethodWrapperType
¶ Тип bound методов некоторых встроенных типов данных и базовых классов. Например это тип
object().__str__
.Добавлено в версии 3.7.
-
types.
MethodDescriptorType
¶ Тип методов некоторых встроенных типов данных, например
str.join()
.Добавлено в версии 3.7.
-
types.
ClassMethodDescriptorType
¶ Тип несвязанных методов класса некоторых встроенных типов данных, например
dict.__dict__['fromkeys']
.Добавлено в версии 3.7.
-
class
types.
ModuleType
(name, doc=None)¶ Типа модулей. Конструктор принимает имя создаваемого модуля и, возможно, его докстринг.
Примечание
Используйте
importlib.util.module_from_spec()
для создания нового модуля, если вы хотите установить различные атрибуты, управляемые импортом.-
__loader__
¶ Загрузчик, который загрузил модуль. По умолчанию
None
.Изменено в версии 3.4: По умолчанию
None
. Раньше атрибут был необязательным.
-
__name__
¶ Имя модуля.
-
__package__
¶ К какому пакету принадлежит модуль. Если модуль является верхним уровнем (т.е. не является частью какого-либо пакета), тогда атрибут должен быть установлен на
''
, иначе он должен быть установлен на имя пакета (которое может быть__name__
, если модуль является самим пакетом) . По умолчаниюNone
.Изменено в версии 3.4: По умолчанию
None
. Раньше атрибут был необязательным.
-
-
class
types.
TracebackType
(tb_next, tb_frame, tb_lasti, tb_lineno)¶ Тип объектов трассировки, например
sys.exc_info()[2]
.См. Справочник по языку для получения подробной информации о доступных атрибутах и операциях, а также руководство по динамическому созданию трассировок.
-
types.
FrameType
¶ Тип объектов фрейма, например, в
tb.tb_frame
, еслиtb
является объектом трассировки.См. Справочник по языку для получения подробной информации о доступных атрибутах и операциях.
-
types.
GetSetDescriptorType
¶ Тип объектов, определенных в модулях расширения с
PyGetSetDef
, напримерFrameType.f_locals
илиarray.array.typecode
. Этот тип используется как дескриптор для атрибутов объекта; он имеет то же назначение, что и типproperty
, но для классов, определенных в модулях расширения.
-
types.
MemberDescriptorType
¶ Тип объектов, определенных в модулях расширения с
PyMemberDef
, напримерdatetime.timedelta.days
. Этот тип используется как дескриптор для простых членов данных C, которые используют стандартные функции преобразования; у него то же назначение, что и типproperty
, но для классов, определенных в модулях расширения.Детали реализации CPython: В других реализациях Python этот тип может быть идентичен
GetSetDescriptorType
.
-
class
types.
MappingProxyType
(mapping)¶ Прокси отображения только для чтения. Он обеспечивает динамическое представление записей сопоставления, что означает, что при изменении сопоставления представление отражает эти изменения.
Добавлено в версии 3.3.
-
key in proxy
Возвращает
True
, если у базового отображения есть ключ key, иначеFalse
.
-
proxy[key]
Возвращает элемент базового сопоставления с ключом key. Вызывает
KeyError
, если key отсутствует в базовом сопоставлении.
-
iter(proxy)
Возвращает итератор по ключам базового сопоставления. Это ярлык для
iter(proxy.keys())
.
-
len(proxy)
Возвращает количество элементов в базовом сопоставлении.
-
copy
()¶ Возвращает неглубокую копию базового сопоставления.
-
get
(key[, default])¶ Возвращает значение key, если key находится в базовом сопоставлении, иначе default. Если default не указан, по умолчанию используется
None
, поэтому этот метод никогда не вызываетKeyError
.
-
items
()¶ Возвращает новое представление элементов базового сопоставления (пары
(key, value)
).
-
keys
()¶ Возвращает новое представление ключей базового сопоставления.
-
values
()¶ Возвращает новое представление значений базового сопоставления.
-
Дополнительные служебные классы и функции¶
-
class
types.
SimpleNamespace
¶ Простой подкласс
object
, который обеспечивает доступ по атрибутам к своему пространству имён, а также значимое представление.В отличие от
object
, сSimpleNamespace
вы можете добавлять и удалять атрибуты. Если объектSimpleNamespace
инициализируется ключевыми аргументами, они напрямую добавляются в базовое пространство имён.Тип примерно эквивалентен следующему коду:
class SimpleNamespace: def __init__(self, /, **kwargs): self.__dict__.update(kwargs) def __repr__(self): keys = sorted(self.__dict__) items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys) return "{}({})".format(type(self).__name__, ", ".join(items)) def __eq__(self, other): if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace): return self.__dict__ == other.__dict__ return NotImplemented
SimpleNamespace
может быть полезен как заменаclass NS: pass
. Однако для типа структурированной записи использовать вместо негоnamedtuple()
.Добавлено в версии 3.3.
-
types.
DynamicClassAttribute
(fget=None, fset=None, fdel=None, doc=None)¶ Маршрутизатор доступа к атрибуту класса через __getattr__.
Это дескриптор, используемый для определения атрибутов, которые действуют по-разному при доступе через экземпляр и через класс. Доступ к экземпляру остается обычным, но доступ к атрибуту через класс будет перенаправлен на метод класса __getattr__; это делается путём повышения AttributeError.
Это позволяет иметь активные свойства в экземпляре и иметь виртуальные атрибуты в классе с тем же именем (см. пример Enum).
Добавлено в версии 3.4.
Служебные функции корутин¶
-
types.
coroutine
(gen_func)¶ Функция преобразует функцию генератор в функцию корутину, которая возвращает корутину основанную на генераторе. Основанная на генераторе корутина всё ещё является генераторным итератором, но также считается объектом корутиной и является ожидаемым. Однако она не обязательно может реализовать метод
__await__()
.Если gen_func является генератор функцией, она будет изменена на месте.
Если gen_func не является генератор функцией, она будет обёрнута. Если он возвращает экземпляр
collections.abc.Generator
, экземпляр будет обёрнут в ожидаемый (awaitable) прокси-объект. Все остальные типы объектов будут возвращены как есть.Добавлено в версии 3.5.