types — Динамическое создание типов и имена встроенных типов
Исходный код: Lib/types.py
Этот модуль определяет вспомогательные функции для динамического создания новых типов.
Он также определяет имена некоторых типов объектов, используемых стандартным интерпретатором Python, но не экспонированных как встроенные, например, int или str.
Наконец, он предоставляет некоторые дополнительные вспомогательные классы и функции, относящиеся к типам, которые недостаточно фундаментальны, чтобы быть встроенными.
1. Динамическое создание типов
-
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, kwdsmetaclass — соответствующий метакласс, namespace — подготовленное пространство имён класса, а kwds — обновлённая копия переданного аргумента kwds, из которого удалён любой
'metaclass'элемент. Если аргумент kwds не передан, это будет пустой словарь.Введено в версии 3.3.
См. также
- Настройка создания классов
- Полные подробности о процессе создания классов, поддерживаемом этими функциями
- PEP 3115 - Метаклассы в Python 3000
- Ввёл
__prepare__хук пространства имён
2. Стандартные типы интерпретатора
Этот модуль предоставляет имена многих типов, необходимых для реализации интерпретатора Python. Он намеренно избегает включения некоторых типов, возникающих только случайно во время обработки, например, типа listiterator.
Типичное использование этих имён — для проверок isinstance() или issubclass().
Стандартные имена определены для следующих типов:
-
types.FunctionType -
types.LambdaType -
Тип пользовательских функций и функций, созданных выражениями
lambda.
-
types.GeneratorType -
Тип объектов итераторов генераторов, созданных функциями-генераторами.
-
types.CoroutineType -
Тип объектов корутин, созданных функциями
async def.Введено в версии 3.5.
-
types.CodeType -
Тип объектов кода, таких как возвращаемые функцией
compile().
-
types.MethodType -
Тип методов экземпляров пользовательских классов.
-
types.BuiltinFunctionType -
types.BuiltinMethodType -
Тип встроенных функций, таких как
len()илиsys.exit(), и методы встроенных классов. (Здесь термин «встроенный» означает «написанный на C».)
-
class types.ModuleType(name, doc=None) -
Тип модулей. Конструктор принимает имя создаваемого модуля и необязательно его строку документации.
Примечание
Используйте
importlib.util.module_from_spec()для создания нового модуля, если вы хотите установить различные управляемые импортом атрибуты.-
__doc__ -
Строка документации модуля. По умолчанию
None.
-
__loader__ -
Загрузчик, который загрузил модуль. По умолчанию
None.Изменено в версии 3.4: По умолчанию
None. Ранее атрибут был необязательным.
-
__name__ -
Имя модуля.
-
__package__ -
В какой пакет принадлежит модуль. Если модуль является верхнего уровня (т. е. не является частью какого-либо конкретного пакета), то атрибут должен быть установлен в
'', иначе он должен быть установлен в имя пакета (который может быть__name__, если сам модуль является пакетом). По умолчаниюNone.Изменено в версии 3.4: По умолчанию
None. Ранее атрибут был необязательным.
-
-
types.TracebackType -
Тип объектов трассировки, таких как найденные в
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() -
Возвращает новый вид значений базового отображения.
-
3. Дополнительные утилитарные классы и функции
-
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): return self.__dict__ == other.__dict__SimpleNamespaceможет быть полезен как замена дляclass NS: pass. Однако для структурированного типа записей используйтеnamedtuple()вместо этого.Добавлен в версии 3.3.
-
types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None) -
Перенаправляет доступ к атрибутам класса на __getattr__.
Это дескриптор, используемый для определения атрибутов, которые ведут себя по-разному при обращении через экземпляр и через класс. Доступ к экземпляру остается нормальным, но доступ к атрибуту через класс будет перенаправлен на метод __getattr__ класса; это делается путем поднятия AttributeError.
Это позволяет иметь свойства, активные в экземпляре, и иметь виртуальные атрибуты в классе с тем же именем (см. Enum для примера).
Добавлен в версии 3.4.
4. Утилитарные функции для корутин
-
types.coroutine(gen_func) -
Эта функция преобразует функцию-генератор в функцию-корутину, которая возвращает корутину на основе генератора. Корутина на основе генератора по-прежнему является итератором-генератором, но также считается объектом-корутиной и является ожидаемым объектом. Однако она может не обязательно реализовывать метод
__await__().Если gen_func является функцией-генератором, она будет изменена на месте.
Если gen_func не является функцией-генератором, она будет обернута. Если она возвращает экземпляр
collections.abc.Generator, экземпляр будет обернут в объект-прокси ожидаемого объекта. Все другие типы объектов будут возвращены как есть.Добавлен в версии 3.5.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.5/library/types.html