Новый синтаксис дженериков PythonPython

Программы на Python
Ответить
Anonymous
 Новый синтаксис дженериков Python

Сообщение Anonymous »

Я видел в документации Python общий синтаксис после версии 3.12:

Код: Выделить всё

class Bag[T]:
pass
Эквивалент:

Код: Выделить всё

Annotation-def TYPE_PARAMS_OF_Bag():
T = typing.TypeVar("T")
class Bag(typing.Generic[T]):
__type_params__ = (T,)
...
Return bag.
Bag = TYPE_PARAMS_OF_Bag()
Другими словами, новый общий синтаксис — это всего лишь синтаксический сахар. Компилятор Python преобразует новый общий синтаксис в форму, аналогичную приведенной выше, или обертывает его аналогичной формой других функций. Фактически, окончательный код для создания дженериков по-прежнему выглядит так: class Bag(typing.Generic[T]). Результаты обоих одинаковы:

Код: Выделить всё

(, , )
(, , )
В PEP 695 новый общий синтаксис предназначен для решения проблемы путаницы, вызванной распространением глобальных переменных типа T=typing.TypeVar('t') . Таким образом, новый общий синтаксис будет переведен в форму, заключенную в функцию и созданную внутри функции, а также будут созданы «существительное» и «области аннотаций».
Итак, правильный ли класс MyClass[T] == class MyClass(t.Generic[T])?

Подробнее здесь: https://stackoverflow.com/questions/793 ... n-generics
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»