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 — Основная поддержка модуля типов и обобщенных типов
Типы стандартных интерпретаторов
Этот модуль предоставляет имена многих типов, необходимых для реализации интерпретатора Python. Он намеренно избегает включения некоторых типов, возникающих только косвенно во время обработки, таких как тип listiterator.
Типичное использование этих имён — для проверок isinstance() или issubclass().
Если вы инициализируете любой из этих типов, обратите внимание, что подписи могут отличаться в разных версиях Python.
Стандартные имена определены для следующих типов:
-
types.NoneType -
Тип
None.Введено в версии 3.10.
-
types.FunctionType -
types.LambdaType -
Тип пользовательских функций и функций, созданных с помощью выражений
lambda.Вызывает событие аудита
function.__new__с аргументомcode.Событие аудита происходит только при непосредственном создании объектов функций, а не при обычной компиляции.
-
types.GeneratorType -
Тип объектов итераторов генератора, созданных функциями-генераторами.
-
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.NotImplementedType -
Тип
NotImplemented.Введено в версии 3.10.
-
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, хранящемуся в объекте__spec__.Примечание
В будущих версиях Python этот атрибут может перестать устанавливаться по умолчанию. Для защиты от этого потенциального изменения предпочтительно читать из атрибута
__spec__вместо этого или использоватьgetattr(module, "__loader__", None), если этот атрибут необходимо использовать явно.Изменено в версии 3.4: По умолчанию
None. Ранее атрибут был необязательным.
-
__name__ -
Имя модуля. Ожидается, что оно соответствует
importlib.machinery.ModuleSpec.name.
-
__package__ -
К какому пакету принадлежит модуль. Если модуль является верхнего уровня (т. е. не является частью какого-либо конкретного пакета), то атрибут должен быть установлен в
'', иначе он должен быть установлен в имя пакета (которое может быть__name__, если сам модуль является пакетом). По умолчаниюNone.Этот атрибут соответствует
importlib.machinery.ModuleSpec.parent, хранящемуся в объекте__spec__.Примечание
В будущих версиях Python этот атрибут может перестать устанавливаться по умолчанию. Для защиты от этого потенциального изменения предпочтительно читать из атрибута
__spec__вместо этого или использоватьgetattr(module, "__package__", None), если этот атрибут необходимо использовать явно.Изменено в версии 3.4: По умолчанию
None. Ранее атрибут был необязательным.
-
__spec__ -
Запись состояния модуля, связанного с системой импорта. Ожидается, что это экземпляр
importlib.machinery.ModuleSpec.Введено в версии 3.4.
-
-
types.EllipsisType -
Тип
Ellipsis.Введено в версии 3.10.
-
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: Теперь этот тип можно наследовать.
См. также
- Типы обобщенных псевдонимов
-
Подробная документация по экземплярам
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__.См. справочник языка для получения подробностей о доступных атрибутах и операциях, а также руководства по динамическому созданию трассировок.
-
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если у основного отображения есть ключ 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 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) -
Эта функция преобразует функцию-генератор в функцию-сопрограмму, которая возвращает сопрограмму на основе генератора. Генераторная сопрограмма всё ещё является итератором генератора, но также считается объектом сопрограммы и является ожидаемым объектом. Однако она не обязательно реализует метод
__await__().Если gen_func является функцией-генератором, она будет модифицирована на месте.
Если gen_func не является функцией-генератором, она будет обернута. Если она возвращает экземпляр
collections.abc.Generator, экземпляр будет обернут в объект-прокси ожидаемого значения. Все другие типы объектов будут возвращены как есть.Новая в версии 3.5.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/types.html