Почему Annotated[str, T] не работает, а Annotated[T, str] работает хорошо?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему Annotated[str, T] не работает, а Annotated[T, str] работает хорошо?

Сообщение Anonymous »

У меня есть проект, в котором пользователю нужно часто использовать Annotated[str, MyType()]. Чтобы упростить его, я пытаюсь создать общий тип

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

T = TypeVar('T')
CustomUrl = Annotated[str, T]
Но я получаю эту ошибку, когда пытаюсь использовать ее таким образом:

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

CustomUrl[MyData()]

# TypeError: typing.Annotated[str, ~T] is not a generic class
Я понятия не имею, почему это происходит, и это работает хорошо, когда я меняю порядок на

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

CustomUrl[T, str]
Но это не то, чего я хочу. Есть ли способ заставить это работать?
Мой вариант использования — попросить пользователя объявить класс данных, и он автоматически сгенерирует схему пользовательского интерфейса, например
< pre class="lang-py Prettyprint-override">

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

# pseudo code

@dataclass
class TaskArgs:
input_text: Annotated[str, {'multiline': True}]
input_file: Annotated[str, {'multifiles': True}]
Обновление
Я попробовал следующий ответ:

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

from typing import Annotated, TypeVar

T = TypeVar('T')

class CustomeUrl(Annotated[str, T]):
...

c: CustomeUrl = 's'
Проблема в том, что последнее выражение вызывает ошибку:

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

Expression of type "Literal['s']" is incompatible with declared type "CustomeUrl"
"Literal['s']" is incompatible with "CustomeUrl"
Причина, по которой я выбираю Annotated, заключается в том, чтобы убедиться, что проверка типа действительна, поэтому я не думаю, что это решит мою проблему.

Подробнее здесь: https://stackoverflow.com/questions/784 ... works-well
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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