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, kwds
metaclass - соответствующий метакласс, namespace - подготовленное пространство имен класса, а kwds - обновленная копия переданного аргумента kwds с удаленными элементами
'metaclass'
. Если аргумент kwds не передан, это будет пустой dict.Добавлено в версии 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.
FunctionType
¶ -
types.
LambdaType
¶ Тип определяемых пользователем функций и функций, создаваемых выражениями
lambda
.Вызывает auditing event
function.__new__
с аргументомcode
.Событие аудита возникает только при прямом инстанцировании функциональных объектов и не возникает при обычной компиляции.
-
types.
CoroutineType
¶ Тип объектов coroutine, создаваемых функциями
async def
.Добавлено в версии 3.5.
-
types.
AsyncGeneratorType
¶ Тип объектов asynchronous generator-итераторов, создаваемых функциями асинхронного генератора.
Добавлено в версии 3.6.
-
class
types.
CodeType
(**kwargs)¶ Тип для объектов кода, например, возвращаемых командой
compile()
.Поднимает auditing event
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
¶ Тип методов класса unbound некоторых встроенных типов данных, таких как
dict.__dict__['fromkeys']
.Добавлено в версии 3.7.
-
class
types.
ModuleType
(name, doc=None)¶ Тип modules. Конструктор принимает имя создаваемого модуля и опционально его docstring.
Примечание
Используйте
importlib.util.module_from_spec()
для создания нового модуля, если вы хотите установить различные атрибуты, контролируемые импортом.-
__loader__
¶ loader, который загрузил модуль. По умолчанию
None
.Этот атрибут должен соответствовать
importlib.machinery.ModuleSpec.loader
, хранящемуся в объекте attr:__spec__.Примечание
Будущая версия Python может перестать устанавливать этот атрибут по умолчанию. Чтобы защититься от этого потенциального изменения, предпочтительно читать из атрибута
__spec__
вместо него или использоватьgetattr(module, "__loader__", None)
, если вам явно нужно использовать этот атрибут.Изменено в версии 3.4: По умолчанию имеет значение
None
. Ранее атрибут был необязательным.
-
__name__
¶ Имя модуля. Ожидается совпадение с
importlib.machinery.ModuleSpec.name
.
-
__package__
¶ К какому 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)¶ Тип parameterized generics, например
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]
.Подробную информацию о доступных атрибутах и операциях, а также руководство по динамическому созданию трассировок см. в the language reference.
-
types.
FrameType
¶ Тип объектов фрейма, таких как найденные в
tb.tb_frame
, еслиtb
является объектом traceback.Подробную информацию о доступных атрибутах и операциях смотрите в the language reference.
-
types.
GetSetDescriptorType
¶ Тип объектов, определенных в модулях расширения с
PyGetSetDef
, таких какFrameType.f_locals
илиarray.array.typecode
. Этот тип используется в качестве дескриптора для атрибутов объекта; он имеет то же назначение, что и типproperty
, но для классов, определенных в модулях расширения.
-
types.
MemberDescriptorType
¶ Тип объектов, определенных в модулях расширения с помощью
PyMemberDef
, таких какdatetime.timedelta.days
. Этот тип используется в качестве дескриптора для простых членов данных языка Си, которые используют стандартные функции преобразования; он имеет то же назначение, что и типproperty
, но для классов, определенных в модулях расширения.CPython implementation detail: В других реализациях Python этот тип может быть идентичен
GetSetDescriptorType
.
-
class
types.
MappingProxyType
(mapping)¶ Прокси отображения отображения только для чтения. Он обеспечивает динамическое представление записей отображения, что означает, что когда отображение изменяется, представление отражает эти изменения.
Добавлено в версии 3.3.
Изменено в версии 3.9: Обновлено для поддержки нового оператора union (
|
) из 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
, предоставляющий атрибутивный доступ к своему пространству имен, а также содержательный repr.В отличие от
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 NotImplemented
SimpleNamespace
может быть полезен в качестве заменыclass NS: pass
. Однако для структурированного типа записи используйтеnamedtuple()
.Добавлено в версии 3.3.
Изменено в версии 3.9: Порядок атрибутов в repr изменился с алфавитного на вставной (как
dict
).
-
types.
DynamicClassAttribute
(fget=None, fset=None, fdel=None, doc=None)¶ Перенаправьте доступ к атрибутам класса на __getattr__.
Это дескриптор, используемый для определения атрибутов, которые ведут себя по-разному при доступе к ним через экземпляр и через класс. Доступ к экземпляру остается обычным, но доступ к атрибуту через класс будет перенаправлен к методу __getattr__ класса; это делается путем возникновения AttributeError.
Это позволяет иметь свойства, активные для экземпляра, и виртуальные атрибуты для класса с тем же именем (см. пример
enum.Enum
).Добавлено в версии 3.4.
Функции утилиты Coroutine¶
-
types.
coroutine
(gen_func)¶ Эта функция преобразует функцию generator в coroutine function, которая возвращает основанный на генераторе coroutine. Корутина на основе генератора по-прежнему является generator iterator, но также рассматривается как объект coroutine и является awaitable. Однако она может не обязательно реализовывать метод
__await__()
.Если gen_func является функцией генератора, она будет модифицирована на месте.
Если gen_func не является функцией генератора, она будет обернута. Если она возвращает экземпляр
collections.abc.Generator
, то этот экземпляр будет обернут в прокси-объект awaitable. Все остальные типы объектов будут возвращены как есть.Добавлено в версии 3.5.