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__hook для пространства имён
-
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.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.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: Теперь этот тип можно наследовать.
-
class types.UnionType -
Тип выражений типа объединения.
Новое в версии 3.10.
-
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) -
Эта функция преобразует функцию-генератор в функцию-корутину, которая возвращает корутину на основе генератора. Корутина на основе генератора по-прежнему является итератором генератора, но также считается объектом корутины и является ожидаемым объектом. Однако она может не обязательно реализовывать метод
__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.10/library/types.html