types
— Динамическое создание типов и имен для встроенных типов¶
Исходный код: Lib/types.py
Этот модуль определяет служебные функции, помогающие в динамическом создании новых типов.
Он также определяет имена для некоторых типов объектов, которые используются стандартным интерпретатором Python, но не доступны в качестве встроенных элементов, таких как int
или str
.
Наконец, он предоставляет некоторые дополнительные служебные классы и функции, связанные с типом, которые не являются достаточно фундаментальными для встраивания.
Создание динамического типа¶
- types.new_class(name, bases=(), kwds=None, exec_body=None)¶
Создает объект класса динамически, используя соответствующий метакласс.
Первые три аргумента - это компоненты, составляющие заголовок определения класса: имя класса, базовые классы (по порядку), аргументы ключевого слова (например,
metaclass
).Аргумент exec_body - это обратный вызов, который используется для заполнения только что созданного пространства имен класса. Он должен принимать пространство имен класса в качестве единственного аргумента и обновлять пространство имен непосредственно содержимым класса. Если обратный вызов не предусмотрен, это имеет тот же эффект, что и передача
lambda ns: None
.Добавлено в версии 3.3.
- types.prepare_class(name, bases=(), kwds=None)¶
Вычисляет соответствующий метакласс и создает пространство имен класса.
Аргументы - это компоненты, составляющие заголовок определения класса: имя класса, базовые классы (по порядку) и аргументы ключевого слова (например,
metaclass
).Возвращаемое значение состоит из 3 кортежей:
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)¶
Динамически разрешать записи ТОИР, как указано в PEP 560.
Эта функция ищет элементы в базах, которые не являются экземплярами
type
, и возвращает кортеж, в котором каждый такой объект, имеющий метод__mro_entries__()
, заменяется распакованным результатом вызова этого метода. Если элемент bases является экземпляромtype
или у него нет метода__mro_entries__()
, то он включается в возвращаемый кортеж без изменений.Добавлено в версии 3.7.
См.также
PEP 560 - Основная поддержка модуля ввода текста и универсальных типов
Стандартные типы переводчиков¶
Этот модуль предоставляет имена для многих типов, которые требуются для реализации интерпретатора Python. Он намеренно избегает включения некоторых типов, которые возникают только случайно во время обработки, таких как тип listiterator
.
Обычно эти имена используются для проверок isinstance()
или issubclass()
.
Если вы создаете экземпляр любого из этих типов, обратите внимание, что сигнатуры могут отличаться в разных версиях Python.
Стандартные названия определены для следующих типов:
- types.FunctionType¶
- types.LambdaType¶
Тип определяемых пользователем функций и функций, созданных с помощью выражений
lambda
.Создает auditing event
function.__new__
с аргументомcode
.Событие аудита возникает только при непосредственном создании экземпляров функциональных объектов и не вызывается при обычной компиляции.
- types.CoroutineType¶
Тип объектов coroutine, создаваемых функциями
async def
.Добавлено в версии 3.5.
- types.AsyncGeneratorType¶
Тип asynchronous generator-объекты-итераторы, создаваемые функциями асинхронного генератора.
Добавлено в версии 3.6.
- class types.CodeType(**kwargs)¶
Тип code objects, такой как возвращаемый
compile()
.Создает auditing event
code.__new__
с аргументамиcode
,filename
,name
,argcount
,posonlyargcount
,kwonlyargcount
,nlocals
,stacksize
,flags
.Обратите внимание, что проверенные аргументы могут не совпадать с именами или позициями, требуемыми инициализатором. Событие аудита возникает только для прямого создания экземпляров объектов кода и не вызывается при обычной компиляции.
- types.CellType¶
Тип объектов cell: такие объекты используются в качестве контейнеров для свободных переменных функции.
Добавлено в версии 3.8.
- types.MethodType¶
Тип методов определяемых пользователем экземпляров класса.
- types.BuiltinFunctionType¶
- types.BuiltinMethodType¶
Тип встроенных функций, таких как
len()
илиsys.exit()
, и методы встроенных классов. (Здесь термин «встроенный» означает «написанный на C».)
- types.WrapperDescriptorType¶
Тип методов некоторых встроенных типов данных и базовых классов, таких как
object.__init__()
илиobject.__lt__()
.Добавлено в версии 3.7.
- types.MethodWrapperType¶
Тип связанных методов некоторых встроенных типов данных и базовых классов. Например, это тип
object().__str__
.Добавлено в версии 3.7.
- types.NotImplementedType¶
Тип
NotImplemented
.Добавлено в версии 3.10.
- types.MethodDescriptorType¶
Тип методов некоторых встроенных типов данных, таких как
str.join()
.Добавлено в версии 3.7.
- types.ClassMethodDescriptorType¶
Тип несвязанных методов класса некоторых встроенных типов данных, таких как
dict.__dict__['fromkeys']
.Добавлено в версии 3.7.
- class types.ModuleType(name, doc=None)¶
Тип modules. Конструктор принимает имя создаваемого модуля и, при необходимости, его docstring.
Примечание
Используйте
importlib.util.module_from_spec()
для создания нового модуля, если вы хотите установить различные атрибуты, контролируемые импортом.- __loader__¶
loader, который загрузил модуль. По умолчанию используется значение
None
.Этот атрибут должен соответствовать
importlib.machinery.ModuleSpec.loader
, хранящемуся в объекте__spec__
.Примечание
В будущей версии Python этот атрибут может быть отменен по умолчанию. Чтобы избежать этого потенциального изменения, предпочтительно использовать вместо него атрибут
__spec__
или использоватьgetattr(module, "__loader__", None)
, если вам явно необходимо использовать этот атрибут.Изменено в версии 3.4: По умолчанию используется значение
None
. Ранее этот атрибут был необязательным.
- __name__¶
Имя модуля. Ожидается, что оно будет соответствовать
importlib.machinery.ModuleSpec.name
.
- __package__¶
К которому package относится модуль. Если модуль является модулем верхнего уровня (т.е. не является частью какого-либо конкретного пакета), то атрибуту должно быть присвоено значение
''
, в противном случае ему должно быть присвоено имя пакета (которое может быть__name__
, если модуль является пакетом сам по себе). По умолчанию используется значениеNone
.Этот атрибут должен соответствовать
importlib.machinery.ModuleSpec.parent
, хранящемуся в объекте__spec__
.Примечание
В будущей версии Python этот атрибут может быть отменен по умолчанию. Чтобы избежать этого потенциального изменения, предпочтительно использовать вместо него атрибут
__spec__
или использоватьgetattr(module, "__package__", None)
, если вам явно необходимо использовать этот атрибут.Изменено в версии 3.4: По умолчанию используется значение
None
. Ранее этот атрибут был необязательным.
- __spec__¶
Запись о состоянии модуля, относящемся к системе импорта. Ожидается, что это будет экземпляр
importlib.machinery.ModuleSpec
.Добавлено в версии 3.4.
- class types.GenericAlias(t_origin, t_args)¶
Тип parameterized generics, например
list[int]
.t_origin
должен быть непараметризованным универсальным классом, таким какlist
,tuple
илиdict
.t_args
должен бытьtuple
(возможно, длиной 1) типов, которые параметризуютt_origin
:>>> from types import GenericAlias >>> list[int] == GenericAlias(list, (int,)) True >>> dict[str, int] == GenericAlias(dict, (str, int)) True
Добавлено в версии 3.9.
Изменено в версии 3.9.2: Теперь этот тип можно разделить на подклассы.
См.также
- Generic Alias Types
Подробная документация по экземплярам
types.GenericAlias
- PEP 585 - Введите Общие Подсказки В Стандартных Коллекциях
Представляем класс
types.GenericAlias
- class types.UnionType¶
-
Добавлено в версии 3.10.
- class types.TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)¶
Тип объектов обратной трассировки, таких как найденные в
sys.exception().__traceback__
.Смотрите the language reference для получения подробной информации о доступных атрибутах и операциях, а также руководства по динамическому созданию обратных связей.
- types.FrameType¶
Тип frame objects, такой как указан в
tb.tb_frame
, еслиtb
является объектом обратной трассировки.
- types.GetSetDescriptorType¶
Тип объектов, определенных в модулях расширения с помощью
PyGetSetDef
, таких какFrameType.f_locals
илиarray.array.typecode
. Этот тип используется в качестве дескриптора для атрибутов объекта; он имеет то же назначение, что и типproperty
, но для классов, определенных в модулях расширения.
- types.MemberDescriptorType¶
Тип объектов, определенных в модулях расширения с помощью
PyMemberDef
, напримерdatetime.timedelta.days
. Этот тип используется в качестве дескриптора для простых элементов данных C, которые используют стандартные функции преобразования; он имеет то же назначение, что и типproperty
, но для классов, определенных в модулях расширения.Кроме того, когда класс определен с атрибутом
__slots__
, то для каждого слота в качестве атрибута класса будет добавлен экземплярMemberDescriptorType
. Это позволяет слоту появиться в списке класса__dict__
.Детали реализации CPython: В других реализациях Python этот тип может быть идентичен
GetSetDescriptorType
.
- class types.MappingProxyType(mapping)¶
Доступный только для чтения прокси-сервер отображения. Он обеспечивает динамическое представление записей отображения, что означает, что при изменении отображения представление отражает эти изменения.
Добавлено в версии 3.3.
Изменено в версии 3.9: Обновлено для поддержки нового оператора union (
|
) из PEP 584, который просто делегируется базовому отображению.- 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()¶
Возвращает новое представление базовых значений сопоставления.
- reversed(proxy)
Возвращает обратный итератор по ключам базового отображения.
Добавлено в версии 3.9.
Дополнительные классы полезности и функции¶
- class types.SimpleNamespace¶
Простой
object
подкласс, который предоставляет атрибутивный доступ к своему пространству имен, а также осмысленное представление.В отличие от
object
, с помощьюSimpleNamespace
вы можете добавлять и удалять атрибуты. Если объектSimpleNamespace
инициализируется аргументами ключевого слова, они непосредственно добавляются в базовое пространство имен.Этот тип примерно эквивалентен следующему коду:
class SimpleNamespace: def __init__(self, /, **kwargs): self.__dict__.update(kwargs) def __repr__(self): items = (f"{k}={v!r}" for k, v in self.__dict__.items()) 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.
Изменено в версии 3.9: Порядок атрибутов в repr изменен с алфавитного на порядок вставки (например,
dict
).
- types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None)¶
Перенаправьте доступ к атрибуту класса на __getattr__.
Это дескриптор, используемый для определения атрибутов, которые действуют по-разному при доступе через экземпляр и через класс. Доступ к экземпляру остается обычным, но доступ к атрибуту через класс будет перенаправлен к методу класса __getattr__; это делается путем вызова AttributeError.
Это позволяет активировать свойства в экземпляре и использовать виртуальные атрибуты в классе с тем же именем (пример смотрите в
enum.Enum
).Добавлено в версии 3.4.
Вспомогательные функции сопрограммы¶
- types.coroutine(gen_func)¶
Эта функция преобразует функцию generator в функцию coroutine function, которая возвращает сопрограмму на основе генератора. Основанная на генераторе сопрограмма по-прежнему является generator iterator, но также считается объектом coroutine и является awaitable. Однако она может не обязательно реализовывать метод
__await__()
.Если gen_func является функцией генератора, она будет изменена на месте.
Если gen_func не является функцией-генератором, она будет преобразована. Если она возвращает экземпляр
collections.abc.Generator
, этот экземпляр будет преобразован в ожидаемый прокси-объект. Все остальные типы объектов будут возвращены как есть.Добавлено в версии 3.5.