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.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, если у базового отображения есть ключ ключ, иначеFalse.
-
proxy[key] -
Возвращает элемент базового отображения с ключом ключ. Вызывает
KeyError, если ключ отсутствует в базовом отображении.
-
iter(proxy) -
Возвращает итератор по ключам базового отображения. Это сокращение для
iter(proxy.keys()).
-
len(proxy) -
Возвращает количество элементов в базовом отображении.
-
copy() -
Возвращает поверхностную копию базового отображения.
-
get(key[, default]) -
Возвращает значение для ключ, если ключ присутствует в базовом отображении, иначе значение по умолчанию. Если значение по умолчанию не указано, оно по умолчанию равно
None, так что этот метод никогда не генерируетKeyError.
-
items() -
Возвращает новый вид элементов базового отображения (
(key, value)пары).
-
keys() -
Возвращает новый вид ключей базового отображения.
-
values() -
Возвращает новый вид значений базового отображения.
-
Дополнительные вспомогательные классы и функции
-
class types.SimpleNamespace -
Простой подкласс
object, который предоставляет доступ к атрибутам своего пространства имён, а также осмысленное представление.В отличие от
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 NotImplementedSimpleNamespaceможет быть полезен в качестве заменыclass NS: pass. Однако для структурированного типа записей используйтеnamedtuple()вместо этого.Введено в версии 3.3.
-
types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None) -
Направляет доступ к атрибутам класса к __getattr__.
Это дескриптор, используемый для определения атрибутов, которые ведут себя по-разному при доступе через экземпляр и через класс. Доступ к экземпляру остаётся нормальным, но доступ к атрибуту через класс будет направлен в метод __getattr__ класса; это делается путём поднятия исключения AttributeError.
Это позволяет иметь свойства, активные в экземпляре, и иметь виртуальные атрибуты в классе с тем же именем (см. Enum в качестве примера).
Введено в версии 3.4.
Вспомогательные функции для корутин
-
types.coroutine(gen_func) -
Эта функция преобразует функцию-генератор в функцию-корутину, которая возвращает корутину на основе генератора. Корутина на основе генератора всё ещё является итератором-генератором, но также считается объектом-корутиной и является ожидаемой. Тем не менее, она может не реализовывать метод
__await__().Если gen_func является функцией-генератором, она будет изменена на месте.
Если gen_func не является функцией-генератором, она будет обернута. Если она возвращает экземпляр
collections.abc.Generator, экземпляр будет обернут в объект-прокси ожидаемой. Все другие типы объектов будут возвращены как есть.Введено в версии 3.5.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/types.html