types
— Динамическое создание типов и имена для встроенных типов¶
Исходный код: Lib/types.py
Модуль определяет служебные функции для содействия динамическому созданию новых типов.
Он также определяет названия некоторых типов объекта, которые являются
используемый стандартным Python интерпретатор, но не выставленные как встроенные
как int
, или str
.
Наконец, он предоставляет некоторые дополнительные связанные с типами служебные классы и функции это не достаточно фундаментально, чтобы быть встроенными.
Динамическое создание типов¶
-
types.
new_class
(name, bases=(), kwds=None, exec_body=None)¶ Динамически создает объект класса с использованием соответствующего метакласса.
Первые три аргумента - это компоненты, составляющие заголовок определения класса: имя класса, базовые классы (по порядку), ключевые аргументы (например,
metaclass
).Аргумент exec_body является колбэком, используемый для заполнения свежесозданного пространства имен класса. Он должен принять пространство имен класса в качестве единственного аргумента и обновить пространство имен непосредственно с содержимым класса. Если колбэк не предоставляется, это имеет тот же эффект, что и прохождение в
lambda ns: ns
.Добавлено в версии 3.3.
-
types.
prepare_class
(name, bases=(), kwds=None)¶ Вычисляет соответствующее метакласс и создает пространство имен класса.
Аргументы - это компоненты, составляющие заголовок определения класса: имя класса, базовые классы (по порядку) и ключевой аргументы (например,
metaclass
).Возвращает значение представляет собой 3-кортеж:
metaclass, namespace, kwds
metaclass - соответствующий метакласс, 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.
FunctionType
¶ -
types.
LambdaType
¶ Тип определяемых пользователем функций и функций, создаваемых
lambda
выражениями.Raises an auditing event
function.__new__
with argumentcode
.Событие аудита возникает только для прямого создания экземпляров функциональных объектов и не возникает при нормальной компиляции.
-
types.
AsyncGeneratorType
¶ Тип объектов асинхронный генератор - итератор, создаваемых асинхронными генератор функциями.
Добавлено в версии 3.6.
-
class
types.
CodeType
(**kwargs)¶ Тип для код объектов, таких как возвращенный по
compile()
.Raises an auditing event
code.__new__
with argumentscode
,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
¶ Тип методов bound некоторых встроенных типов данных и базовых классов. Например, это тип
object().__str__
.Добавлено в версии 3.7.
-
types.
MethodDescriptorType
¶ Тип методов некоторых встроенных типов данных, таких как
str.join()
.Добавлено в версии 3.7.
-
types.
ClassMethodDescriptorType
¶ Тип методов класса unbound для некоторых встроенных типов данных, таких как
dict.__dict__['fromkeys']
.Добавлено в версии 3.7.
-
class
types.
ModuleType
(name, doc=None)¶ Тип модули. Конструктор принимает имя создаваемого модуля и, при необходимости, его докстринг.
Примечание
Используйте
importlib.util.module_from_spec()
для создания нового модуля, если требуется установить различные управляемые импортом атрибуты.-
__loader__
¶ «Загрузчик, загрузивший модуль». По умолчанию -
None
.Изменено в версии 3.4: По умолчанию -
None
. Ранее атрибут был необязательным.
-
__name__
¶ Имя модуля.
-
__package__
¶ К какому пакету принадлежит модуль. Если модуль является модулем верхнего уровня (т.е. не является частью какого-либо конкретного пакета), то атрибут должен быть установлен в
''
, иначе ему должно быть присвоено имя пакета (которое может быть__name__
, если модуль является самим пакетом). По умолчанию -None
.Изменено в версии 3.4: По умолчанию -
None
. Ранее атрибут был необязательным.
-
-
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
, имеет ли нижележащее сопоставление ключевое 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
()¶ Возвращает новое представление значения базового сопоставления.
-
Дополнительные служебные классы и функции¶
-
class
types.
SimpleNamespace
¶ Простой
object
подкласс, предоставляющий атрибут доступ к своему пространству имен, а также осмысленную repr.В отличие от
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 NotImplemented
SimpleNamespace
может быть полезным в качестве заменыclass NS: pass
. Однако для структурированного типа записи используйтеnamedtuple()
.Добавлено в версии 3.3.
-
types.
DynamicClassAttribute
(fget=None, fset=None, fdel=None, doc=None)¶ Маршрутизация доступа атрибут к классу в __getattr__.
Это дескриптор, используемый определить атрибуты, которые действуют по-разному при доступе через сущность и класс. Доступ к экземпляру остается нормальным, но доступ к атрибут через класс будет направляться методу __getattr__ класса; это выполняется путем создания AttribureError.
Позволяет иметь активные свойства в сущность и виртуальные атрибуты в классе с тем же именем (пример см. в разделе перечисление).
Добавлено в версии 3.4.
Служебные функции Coroutine¶
-
types.
coroutine
(gen_func)¶ Функция преобразует функцию генератор в функцию корутину, который возвращает генератор-основанную корутину. Генератор-основанная корутина все еще является генераторным итератором, но также считается корутиной объектом и является awaitable. Однако он не обязательно может реализовать способ
__await__()
.Если gen_func является функцией генератор, она будет изменена по месту.
Если gen_func не является функцией генератор, она будет обернута. Если это возвращает сущность
collections.abc.Generator
, сущность будет обернут в объект по доверенности awaitable. Все остальные типы объектов будут возвращенный как есть.Добавлено в версии 3.5.