Spec-Zone.ru › Python 3.7

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().

Стандартные имена определены для следующих типов:

types.FunctionType
types.LambdaType

Тип пользовательских функций и функций, созданных выражениями lambda.

types.GeneratorType

Тип объектов итератора-генератора, созданных функциями-генераторами.

types.CoroutineType

Тип объектов корутины, созданных функциями async def.

Добавлена в версии 3.5.

types.AsyncGeneratorType

Тип объектов итератора асинхронного генератора, созданных функциями асинхронных генераторов.

Добавлена в версии 3.6.

types.CodeType

Тип объектов кода, таких как возвращаемые compile().

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.

END_OF_DOCUMENT_MARKER
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. Ранее атрибут был необязательным.

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, который обеспечивает доступ к атрибутам его пространства имен, а также осмысленное представление.

В отличие от 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.

Функции-утилиты для корутин

types.coroutine(gen_func)

Эта функция преобразует функцию-генератор в функцию-корутину, которая возвращает корутину на основе генератора. Корутина на основе генератора всё ещё является итератором-генератором, но также считается объектом-корутиной и является awaitable. Однако, она необязательно реализует метод __await__().

Если gen_func является функцией-генератором, она будет изменена на месте.

Если gen_func не является функцией-генератором, она будет обернута. Если она возвращает экземпляр collections.abc.Generator, экземпляр будет обернут в объект-прокси awaitable. Все другие типы объектов будут возвращены как есть.

Введено в версии 3.5.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.7/library/types.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API