`typing.get_origin` против `TypeAlias.__origin__`Python

Программы на Python
Ответить
Anonymous
 `typing.get_origin` против `TypeAlias.__origin__`

Сообщение Anonymous »

В документации Python GenericAlias.__origin__ определяется как:

Этот атрибут указывает на непараметризованный универсальный класс

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

list[int].__origin__  # returns list
Существует также тип typing.get_origin, который определяется по-другому:

Получите версию типа без индекса: для типизирующего объекта формы X[Y, Z, ...] верните X.

Так что обычно практической разницы нет - get_origin(cls) обычно эквивалентен getattr(cls, '__origin__', None). Но я столкнулся как минимум с одним случаем, когда они различались:

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

>>> get_origin(Annotated[int, 3])
typing.Annotated
>>> Annotated[int, 3].__origin__
int
Итак, мои вопросы:

[*]Почему существуют два противоречивых определения понятия «происхождение»?
[*]Если меня не волнуют аннотации в моем коде обработки типов во время выполнения, есть ли «правильный способ» их удалить? Например, нужно ли мне разворачивать каждый отдельный объект типа, если get_origin(cls) печатает. С аннотацией: cls = cls.__origin__, чтобы убедиться, что get_origin будет вести себя должным образом?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ias-origin
Ответить

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

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

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

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

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