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, 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 - Основная поддержка модуля typing и универсальных типов
Стандартные типы интерпретатора
Этот модуль предоставляет имена многих типов, необходимых для реализации интерпретатора Python. Он намеренно избегает включения некоторых типов, возникающих только случайно во время обработки, таких как тип listiterator.
Типичное использование этих имен — для проверок isinstance() или issubclass().
Если вы создаёте экземпляры этих типов, обратите внимание, что сигнатуры могут различаться между версиями Python.
Стандартные имена определены для следующих типов:
-
types.FunctionType -
types.LambdaType -
Тип пользовательских функций и функций, созданных с помощью выражений
lambda.Вызывает событие аудита аудита
function.__new__с аргументомcode.Событие аудита возникает только при непосредственном создании объектов функций, а не при обычном компировании.
-
types.GeneratorType -
Тип объектов итераторов генераторов, созданных функциями-генераторами.
-
types.CoroutineType -
Тип объектов корутин, созданных функциями
async def.Введено в версии 3.5.
-
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 -
Тип связанных методов некоторых встроенных типов данных и базовых классов. Например, это тип
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()для создания нового модуля, если вы хотите установить различные управляемые импортом атрибуты.-
__doc__ -
Документация модуля. По умолчанию
None.
-
__loader__ -
Загрузчик, который загрузил модуль. По умолчанию
None.Этот атрибут соответствует
importlib.machinery.ModuleSpec.loaderкак хранящемуся в объекте attr:__spec__.Примечание
В будущих версиях Python этот атрибут может перестать устанавливаться по умолчанию. Чтобы защититься от этого возможного изменения, предпочтительно читать из атрибута
__spec__вместо этого или использоватьgetattr(module, "__loader__", None)при необходимости.Изменено в версии 3.4: По умолчанию
None. Ранее атрибут был необязательным.
-
__name__ -
Имя модуля. Ожидается, что оно будет соответствовать
importlib.machinery.ModuleSpec.name.
-
__package__ -
К какому пакету относится модуль. Если модуль является верхнего уровня (т. е. не является частью какого-либо конкретного пакета), то атрибут должен быть установлен в
'', в противном случае он должен быть установлен в имя пакета (который может быть__name__, если сам модуль является пакетом). По умолчаниюNone.Этот атрибут соответствует
importlib.machinery.ModuleSpec.parentкак хранящемуся в объекте attr:__spec__.Примечание
В будущих версиях Python этот атрибут может перестать устанавливаться по умолчанию. Чтобы защититься от этого возможного изменения, предпочтительно читать из атрибута
__spec__вместо этого или использоватьgetattr(module, "__package__", None)при необходимости.Изменено в версии 3.4: По умолчанию
None. Ранее атрибут был необязательным.
-
__spec__ -
Запись состояния модуля, связанного с системой импорта. Ожидается, что это экземпляр
importlib.machinery.ModuleSpec.Введено в версии 3.4.
-
-
class types.GenericAlias(t_origin, t_args) -
Тип параметризованных обобщений, таких как
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: Теперь этот тип можно наследовать.
-
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.
Изменено в версии 3.9: Обновлено для поддержки нового оператора объединения (
|) из PEP 584, который просто делегирует подчинённому отображению.-
key in proxy -
Возвращает
True, если подчинённое отображение имеет ключ ключ, иначеFalse.
-
proxy[key] -
Возвращает элемент подчинённого отображения с ключом ключ. Вызывает
KeyError, если ключ отсутствует в подчинённом отображении.
-
iter(proxy) -
Возвращает итератор по ключам подчинённого отображения. Это сокращение для
iter(proxy.keys()).
-
len(proxy) -
Возвращает количество элементов в подчинённом отображении.
-
copy() -
Возвращает поверхностную копию подчинённого отображения.
-
get(key[, 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 NotImplementedSimpleNamespaceможет быть полезен как заменаclass NS: pass. Однако для структурированного типа записи используйтеnamedtuple()вместо этого.Введено в версии 3.3.
Изменено в версии 3.9: Порядок атрибутов в представлении изменён с лексикографического на порядок вставки (как в
dict).
-
types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None) -
Перенаправление доступа к атрибутам класса в __getattr__.
Это описатель, используемый для определения атрибутов, которые ведут себя по-разному при обращении через экземпляр и через класс. Доступ к экземпляру остаётся нормальным, но доступ к атрибуту через класс будет перенаправлен в метод __getattr__ класса; это делается путём возбуждения исключения AttributeError.
Это позволяет иметь свойства, активные в экземпляре, и иметь виртуальные атрибуты в классе с тем же именем (см.
enum.Enumдля примера).Введено в версии 3.4.
Функции-утилиты для корутин
-
types.coroutine(gen_func) -
Эта функция преобразует функцию-генератор в функцию-корутину, которая возвращает корутину на основе генератора. Корутина на основе генератора всё ещё является итератором генератора, но также считается объектом корутины и является awaitable. Однако она необязательно реализует метод
__await__().Если gen_func является функцией-генератором, она будет модифицирована на месте.
Если gen_func не является функцией-генератором, она будет обернута. Если она возвращает экземпляр
collections.abc.Generator, экземпляр будет обернут в прокси-объект awaitable. Все другие типы объектов будут возвращены как есть.Введено в версии 3.5.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/types.html