Документация Python неофициальный перевод

types.md

370 строк · 26.1 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.10/library/types.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`types`](https://python-all.ru/3.10/library/types.html#module-types) – Динамическое создание типов и имена для встроенных типов89**Исходный код:** [Lib/types.py](https://python-all.ru/src/3.10/Lib/types.py)1011---1213Этот модуль определяет вспомогательные функции для динамического создания новых типов.1415Он также определяет имена для некоторых объектных типов, которые используются стандартным интерпретатором Python, но не доступны как встроенные, такие как [`int`](https://python-all.ru/3.10/library/functions.html#int) или [`str`](https://python-all.ru/3.10/library/stdtypes.html#str).1617Наконец, он предоставляет несколько дополнительных вспомогательных классов и функций, связанных с типами, которые не настолько фундаментальны, чтобы быть встроенными.1819## Динамическое создание типов2021#### `types.new_class(name, bases=(), kwds=None, exec_body=None)`2223Динамически создаёт объект класса, используя соответствующий метакласс.2425Первые три аргумента – это компоненты, составляющие заголовок определения класса: имя класса, базовые классы (по порядку), аргументы-ключевые слова (такие как `metaclass`).2627Аргумент *exec\_body* – это колбэк, используемый для заполнения только что созданного пространства имён класса. Он должен принимать пространство имён класса в качестве единственного аргумента и напрямую обновлять пространство имён содержимым класса. Если колбэк не указан, эффект такой же, как при передаче `lambda ns: None`.2829Новое в версии 3.3.3031#### `types.prepare_class(name, bases=(), kwds=None)`3233Вычисляет соответствующий метакласс и создаёт пространство имён класса.3435Аргументы – это компоненты, составляющие заголовок определения класса: имя класса, базовые классы (по порядку) и аргументы-ключевые слова (такие как `metaclass`).3637Возвращаемое значение – 3-кортеж: `metaclass, namespace, kwds`3839*metaclass* – это соответствующий метакласс, *namespace* – это подготовленное пространство имён класса, а *kwds* – это обновлённая копия переданного аргумента *kwds*, из которого удалена запись `'metaclass'`. Если аргумент *kwds* не был передан, будет пустой словарь.4041Новое в версии 3.3.4243Изменено в версии 3.6: Значение по умолчанию для элемента `namespace` возвращаемого кортежа изменилось. Теперь используется отображение, сохраняющее порядок вставки, если метакласс не имеет метода `__prepare__`.4445> **См. также**46>47> **[Метаклассы](https://python-all.ru/3.10/reference/datamodel.html#metaclasses)**48>49> Полные сведения о процессе создания класса, поддерживаемом этими функциями50>51> **[**PEP 3115**](https://python-all.ru/3.10/library/types.html) – Метаклассы в Python 3000**52>53> Ввёл перехватчик пространства имён `__prepare__`5455#### `types.resolve_bases(bases)`5657Разрешает записи MRO динамически, как указано в [**PEP 560**](https://python-all.ru/3.10/library/types.html).5859Эта функция ищет элементы в *bases*, которые не являются экземплярами [`type`](https://python-all.ru/3.10/library/functions.html#type), и возвращает кортеж, в котором каждый такой объект, имеющий метод `__mro_entries__`, заменяется распакованным результатом вызова этого метода. Если элемент *bases* является экземпляром [`type`](https://python-all.ru/3.10/library/functions.html#type) или не имеет метода `__mro_entries__`, он включается в возвращаемый кортеж без изменений.6061Добавлено в версии 3.7.6263> **См. также**64>65> [**PEP 560**](https://python-all.ru/3.10/library/types.html) – Базовая поддержка модуля typing и обобщённых типов6667## Стандартные типы интерпретатора6869Этот модуль предоставляет имена для многих типов, необходимых для реализации интерпретатора Python. Он намеренно избегает включения некоторых типов, которые возникают лишь попутно при обработке, таких как тип `listiterator`.7071Типичное использование этих имён – для проверок [`isinstance()`](https://python-all.ru/3.10/library/functions.html#isinstance) или [`issubclass()`](https://python-all.ru/3.10/library/functions.html#issubclass).7273При создании экземпляров любого из этих типов учтите, что сигнатуры могут различаться в разных версиях Python.7475Стандартные имена определены для следующих типов:7677#### `types.NoneType`7879Тип [`None`](https://python-all.ru/3.10/library/constants.html#None).8081Новое в версии 3.10.8283#### `types.FunctionType`8485#### `types.LambdaType`8687Тип пользовательских функций и функций, созданных [`lambda`](https://python-all.ru/3.10/reference/expressions.html#lambda) выражениями.8889Вызывает [событие аудита](https://python-all.ru/3.10/library/sys.html#auditing) `function.__new__` с аргументом `code`.9091Событие аудита происходит только при прямом создании объектов функций и не возникает при обычной компиляции.9293#### `types.GeneratorType`9495Тип объектов [генератора](https://python-all.ru/3.10/glossary.html#term-generator)-итератора, создаваемых функциями-генераторами.9697#### `types.CoroutineType`9899Тип объектов [корутины](https://python-all.ru/3.10/glossary.html#term-coroutine), создаваемых [`async def`](https://python-all.ru/3.10/reference/compound_stmts.html#async-def) функциями.100101Новое в версии 3.5.102103#### `types.AsyncGeneratorType`104105Тип объектов [асинхронного генератора](https://python-all.ru/3.10/glossary.html#term-asynchronous-generator)-итератора, создаваемых асинхронными функциями-генераторами.106107Новое в версии 3.6.108109#### `class types.CodeType(**kwargs)`110111Тип объектов кода, возвращаемых [`compile()`](https://python-all.ru/3.10/library/functions.html#compile).112113Вызывает [событие аудита](https://python-all.ru/3.10/library/sys.html#auditing) `code.__new__` с аргументами `code`, `filename`, `name`, `argcount`, `posonlyargcount`, `kwonlyargcount`, `nlocals`, `stacksize`, `flags`.114115Обратите внимание, что проверяемые аргументы могут не соответствовать именам или позициям, требуемым инициализатором. Событие аудита происходит только при прямом создании объектов кода и не возникает при обычной компиляции.116117#### `replace(**kwargs)`118119Возвращает копию объекта кода с новыми значениями для указанных полей.120121Новое в версии 3.8.122123#### `types.CellType`124125Тип для объектов ячеек: такие объекты используются как контейнеры для свободных переменных функции.126127Новое в версии 3.8.128129#### `types.MethodType`130131Тип методов экземпляров пользовательских классов.132133#### `types.BuiltinFunctionType`134135#### `types.BuiltinMethodType`136137Тип встроенных функций, таких как [`len()`](https://python-all.ru/3.10/library/functions.html#len) или [`sys.exit()`](https://python-all.ru/3.10/library/sys.html#sys.exit), и методов встроенных классов. (Здесь термин «встроенный» означает «написанный на C».)138139#### `types.WrapperDescriptorType`140141Тип методов некоторых встроенных типов данных и базовых классов, таких как [`object.__init__()`](https://python-all.ru/3.10/reference/datamodel.html#object.__init__) или [`object.__lt__()`](https://python-all.ru/3.10/reference/datamodel.html#object.__lt__).142143Добавлено в версии 3.7.144145#### `types.MethodWrapperType`146147Тип *связанных* методов некоторых встроенных типов данных и базовых классов. Например, это тип `object().__str__`.148149Добавлено в версии 3.7.150151#### `types.NotImplementedType`152153Тип [`NotImplemented`](https://python-all.ru/3.10/library/constants.html#NotImplemented).154155Новое в версии 3.10.156157#### `types.MethodDescriptorType`158159Тип методов некоторых встроенных типов данных, таких как [`str.join()`](https://python-all.ru/3.10/library/stdtypes.html#str.join).160161Добавлено в версии 3.7.162163#### `types.ClassMethodDescriptorType`164165Тип *несвязанных* методов классов некоторых встроенных типов данных, таких как `dict.__dict__['fromkeys']`.166167Добавлено в версии 3.7.168169#### `class types.ModuleType(name, doc=None)`170171Тип [модулей](https://python-all.ru/3.10/glossary.html#term-module). Конструктор принимает имя создаваемого модуля и, опционально, его [докстринг](https://python-all.ru/3.10/glossary.html#term-docstring).172173> **Примечание**174>175> [`importlib.util.module_from_spec()`](https://python-all.ru/3.10/library/importlib.html#importlib.util.module_from_spec) применяется для создания нового модуля, если требуется задать различные атрибуты, управляемые импортом.176177#### `__doc__`178179[Докстринг](https://python-all.ru/3.10/glossary.html#term-docstring) модуля. По умолчанию равен `None`.180181#### `__loader__`182183[Загрузчик](https://python-all.ru/3.10/glossary.html#term-loader), загрузивший модуль. По умолчанию равен `None`.184185Этот атрибут должен совпадать с [`importlib.machinery.ModuleSpec.loader`](https://python-all.ru/3.10/library/importlib.html#importlib.machinery.ModuleSpec.loader), хранящимся в объекте [`__spec__`](https://python-all.ru/3.10/reference/import.html#spec__).186187> **Примечание**188>189> В будущей версии Python может перестать устанавливать этот атрибут по умолчанию. Чтобы защититься от этого возможного изменения, предпочтительнее читать из атрибута [`__spec__`](https://python-all.ru/3.10/reference/import.html#spec__) или использовать `getattr(module, "__loader__", None)`, если необходимо явно использовать данный атрибут.190191Изменено в версии 3.4: По умолчанию `None`. Ранее атрибут был необязательным.192193#### `__name__`194195Имя модуля. Ожидается, что оно совпадает с [`importlib.machinery.ModuleSpec.name`](https://python-all.ru/3.10/library/importlib.html#importlib.machinery.ModuleSpec.name).196197#### `__package__`198199[Пакет](https://python-all.ru/3.10/glossary.html#term-package), к которому принадлежит модуль. Если модуль является корневым (т.е. не входит ни в один конкретный пакет), то атрибут должен быть установлен в `''`, в противном случае – в имя пакета (которое может быть [`__name__`](https://python-all.ru/3.10/reference/import.html#name__), если сам модуль является пакетом). По умолчанию равен `None`.200201Этот атрибут должен совпадать с [`importlib.machinery.ModuleSpec.parent`](https://python-all.ru/3.10/library/importlib.html#importlib.machinery.ModuleSpec.parent), хранящимся в объекте [`__spec__`](https://python-all.ru/3.10/reference/import.html#spec__).202203> **Примечание**204>205> В будущей версии Python может перестать устанавливать этот атрибут по умолчанию. Чтобы защититься от этого возможного изменения, предпочтительнее читать из атрибута [`__spec__`](https://python-all.ru/3.10/reference/import.html#spec__) или использовать `getattr(module, "__package__", None)`, если необходимо явно использовать данный атрибут.206207Изменено в версии 3.4: По умолчанию `None`. Ранее атрибут был необязательным.208209#### `__spec__`210211Запись состояния модуля, связанного с системой импорта. Должен быть экземпляром [`importlib.machinery.ModuleSpec`](https://python-all.ru/3.10/library/importlib.html#importlib.machinery.ModuleSpec).212213Новое в версии 3.4.214215#### `types.EllipsisType`216217Тип [`Ellipsis`](https://python-all.ru/3.10/library/constants.html#Ellipsis).218219Новое в версии 3.10.220221#### `class types.GenericAlias(t_origin, t_args)`222223Тип [параметризованных дженериков](https://python-all.ru/3.10/library/stdtypes.html#types-genericalias), таких как `list[int]`.224225`t_origin` должен быть непараметризованным обобщённым классом, таким как `list`, `tuple` или `dict`. `t_args` должен быть [`tuple`](https://python-all.ru/3.10/library/stdtypes.html#tuple) (возможно, длины 1) из типов, которые параметризуют `t_origin`:226227```python228>>> from types import GenericAlias229230>>> list[int] == GenericAlias(list, (int,))231True232>>> dict[str, int] == GenericAlias(dict, (str, int))233True234```235236Новое в версии 3.9.237238Изменено в версии 3.9.2: Теперь этот тип можно наследовать.239240#### `class types.UnionType`241242Тип [выражений типов объединений](https://python-all.ru/3.10/library/stdtypes.html#types-union).243244Новое в версии 3.10.245246#### `class types.TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)`247248Тип объектов traceback, таких как в `sys.exc_info()[2]`.249250См. [справочник по языку](https://python-all.ru/3.10/reference/datamodel.html#traceback-objects) для получения подробной информации о доступных атрибутах и операциях, а также рекомендации по динамическому созданию трассировок.251252#### `types.FrameType`253254Тип объектов фреймов, которые можно найти в `tb.tb_frame`, если `tb` является объектом traceback.255256Подробнее об атрибутах и операциях см. в [справочнике по языку](https://python-all.ru/3.10/reference/datamodel.html#frame-objects).257258#### `types.GetSetDescriptorType`259260Тип объектов, определенных в модулях расширения с помощью `PyGetSetDef`, таких как `FrameType.f_locals` или `array.array.typecode`. Этот тип используется в качестве дескриптора атрибутов объектов; он имеет то же назначение, что и тип [`property`](https://python-all.ru/3.10/library/functions.html#property), но для классов, определенных в модулях расширения.261262#### `types.MemberDescriptorType`263264Тип объектов, определённых в модулях расширения с помощью `PyMemberDef`, таких как `datetime.timedelta.days`. Этот тип используется как дескриптор для простых элементов данных C, которые используют стандартные функции преобразования; он имеет то же назначение, что и тип [`property`](https://python-all.ru/3.10/library/functions.html#property), но для классов, определённых в модулях расширения.265266**Особенность реализации CPython:** В других реализациях Python этот тип может быть идентичен `GetSetDescriptorType`.267268#### `class types.MappingProxyType(mapping)`269270Прокси-объект отображения только для чтения. Он предоставляет динамическое представление записей отображения, что означает, что при изменении отображения представление отражает эти изменения.271272Новое в версии 3.3.273274Изменено в версии 3.9: Обновлено для поддержки нового оператора объединения (`|`) из [**PEP 584**](https://python-all.ru/3.10/library/types.html), который просто делегирует базовому отображению.275276#### `key in proxy`277278Возвращает `True`, если в базовом отображении присутствует ключ *key*, иначе `False`.279280#### `proxy[key]`281282Возвращает элемент базового отображения с ключом *key*. Возбуждает исключение [`KeyError`](https://python-all.ru/3.10/library/exceptions.html#KeyError), если *key* отсутствует в базовом отображении.283284#### `iter(proxy)`285286Возвращает итератор по ключам базового отображения. Это краткая форма записи для `iter(proxy.keys())`.287288#### `len(proxy)`289290Возвращает количество элементов в базовом отображении.291292#### `copy()`293294Возвращает поверхностную копию базового отображения.295296#### `get(key[, default])`297298Возвращает значение для *key*, если *key* присутствует в базовом отображении, иначе *default*. Если *default* не указан, по умолчанию используется `None`, так что этот метод никогда не возбуждает исключение [`KeyError`](https://python-all.ru/3.10/library/exceptions.html#KeyError).299300#### `items()`301302Возвращает новое представление элементов базового отображения (пары `(key, value)` ).303304#### `keys()`305306Возвращает новое представление ключей базового отображения.307308#### `values()`309310Возвращает новое представление значений базового отображения.311312#### `reversed(proxy)`313314Возвращает обратный итератор по ключам базового отображения.315316Новое в версии 3.9.317318## Дополнительные вспомогательные классы и функции319320#### `class types.SimpleNamespace`321322Простой подкласс [`object`](https://python-all.ru/3.10/library/functions.html#object), который предоставляет доступ к атрибутам своего пространства имён, а также осмысленное строковое представление.323324В отличие от [`object`](https://python-all.ru/3.10/library/functions.html#object), с помощью `SimpleNamespace` можно добавлять и удалять атрибуты. Если объект `SimpleNamespace` инициализируется с именованными аргументами, они напрямую добавляются в базовое пространство имён.325326Этот тип примерно эквивалентен следующему коду:327328```python329class SimpleNamespace:330    def __init__(self, /, **kwargs):331        self.__dict__.update(kwargs)332333    def __repr__(self):334        items = (f"{k}={v!r}" for k, v in self.__dict__.items())335        return "{}({})".format(type(self).__name__, ", ".join(items))336337    def __eq__(self, other):338        if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace):339           return self.__dict__ == other.__dict__340        return NotImplemented341```342343`SimpleNamespace` может быть полезен в качестве замены `class NS: pass`. Однако для структурированных записей лучше использовать [`namedtuple()`](https://python-all.ru/3.10/library/collections.html#collections.namedtuple).344345Новое в версии 3.3.346347Изменено в версии 3.9: Порядок атрибутов в строковом представлении изменён с алфавитного на порядок вставки (как в `dict`).348349#### `types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None)`350351Перенаправляет доступ к атрибуту класса в \_\_getattr\_\_.352353Это дескриптор, используемый для определения атрибутов, которые ведут себя по-разному при доступе через экземпляр и через класс. Доступ через экземпляр остаётся обычным, но доступ к атрибуту через класс будет перенаправлен в метод \_\_getattr\_\_ класса; это достигается возбуждением исключения AttributeError.354355Это позволяет иметь свойства, активные на экземпляре, и виртуальные атрибуты на классе с тем же именем (см. [`enum.Enum`](https://python-all.ru/3.10/library/enum.html#enum.Enum) для примера).356357Новое в версии 3.4.358359## Вспомогательные функции корутин360361#### `types.coroutine(gen_func)`362363Эта функция преобразует функцию [generator](https://python-all.ru/3.10/glossary.html#term-generator) в [корутинную функцию](https://python-all.ru/3.10/glossary.html#term-coroutine-function), которая возвращает корутину на основе генератора. Корутина на основе генератора по-прежнему является [generator iterator](https://python-all.ru/3.10/glossary.html#term-generator-iterator), но также считается объектом [корутины](https://python-all.ru/3.10/glossary.html#term-coroutine) и является [ожидаемым объектом](https://python-all.ru/3.10/glossary.html#term-awaitable). Однако она может не реализовывать метод [`__await__()`](https://python-all.ru/3.10/reference/datamodel.html#object.__await__).364365Если *gen\_func* является функцией-генератором, она будет изменена на месте.366367Если *gen\_func* не является функцией-генератором, она будет обёрнута. Если она возвращает экземпляр [`collections.abc.Generator`](https://python-all.ru/3.10/library/collections.abc.html#collections.abc.Generator), экземпляр будет обёрнут в прокси-объект, который является *ожидаемым объектом*. Все остальные типы объектов будут возвращены как есть.368369Новое в версии 3.5.370