types — Динамическое создание типов и имена для встроенных типов¶
Исходный код: Lib/types.py
Модуль определяет служебные функции для содействия динамическому созданию новых типов.
Он также определяет названия некоторых типов объекта, которые являются
используемый стандартным 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).Возвращает значение представляет собой 3-кортеж:
metaclass, namespace, kwdsmetaclass - соответствующий метакласс, namespace - подготовленное пространство имен класса, и kwds - обновленная копия переданного в аргументе kwds с любым удаленным входом
'metaclass'. Если kwds аргумент не передан, это будет пустой словарь.Добавлено в версии 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выражениями.Raises an auditing event
function.__new__with argumentcode.Событие аудита возникает только для прямого создания экземпляров функциональных объектов и не возникает при нормальной компиляции.
-
types.AsyncGeneratorType¶ Тип объектов асинхронный генератор - итератор, создаваемых асинхронными генератор функциями.
Добавлено в версии 3.6.
-
class
types.CodeType(**kwargs)¶ Тип для код объектов, таких как возвращенный по
compile().Raises an auditing event
code.__new__with argumentscode,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¶ Тип методов класса unbound для некоторых встроенных типов данных, таких как
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подкласс, предоставляющий атрибут доступ к своему пространству имен, а также осмысленную repr.В отличие от
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__ класса; это выполняется путем создания AttribureError.
Позволяет иметь активные свойства в сущность и виртуальные атрибуты в классе с тем же именем (пример см. в разделе перечисление).
Добавлено в версии 3.4.
Служебные функции Coroutine¶
-
types.coroutine(gen_func)¶ Функция преобразует функцию генератор в функцию корутину, который возвращает генератор-основанную корутину. Генератор-основанная корутина все еще является генераторным итератором, но также считается корутиной объектом и является awaitable. Однако он не обязательно может реализовать способ
__await__().Если gen_func является функцией генератор, она будет изменена по месту.
Если gen_func не является функцией генератор, она будет обернута. Если это возвращает сущность
collections.abc.Generator, сущность будет обернут в объект по доверенности awaitable. Все остальные типы объектов будут возвращенный как есть.Добавлено в версии 3.5.
