Warum funktioniert Annotated[str, T] nicht, während Annotated[T, str] gut funktioniert?Python

Python-Programme
Guest
 Warum funktioniert Annotated[str, T] nicht, während Annotated[T, str] gut funktioniert?

Post by Guest »

Ich habe ein Projekt, bei dem Benutzer häufig Annotated[str, MyType()] verwenden müssen. Um es zu vereinfachen, versuche ich, einen generischen Typ zu erstellen

Code: Select all

T = TypeVar('T')
CustomUrl = Annotated[str, T]
Aber ich erhalte diese Fehlermeldung, wenn ich versuche, es auf diese Weise zu verwenden:

Code: Select all

CustomUrl[MyData()]

# TypeError: typing.Annotated[str, ~T] is not a generic class
Ich habe keine Ahnung, warum das passiert, und es funktioniert gut, wenn ich die Reihenfolge umkehre zu

Code: Select all

CustomUrl[T, str]
Aber das ist nicht das, was ich will. Gibt es eine Möglichkeit, es zum Laufen zu bringen?
Mein Anwendungsfall besteht darin, dass der Benutzer eine Datenklasse deklariert und automatisch ein UI-Schema generiert wird, zum Beispiel
< pre class="lang-py Prettyprint-override">

Code: Select all

# pseudo code

@dataclass
class TaskArgs:
input_text: Annotated[str, {'multiline': True}]
input_file: Annotated[str, {'multifiles': True}]
Update
Ich habe die folgende Antwort ausprobiert:

Code: Select all

from typing import Annotated, TypeVar

T = TypeVar('T')

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

c: CustomeUrl = 's'
Das Problem ist, dass der letzte Ausdruck den Fehler auslöst:

Code: Select all

Expression of type "Literal['s']" is incompatible with declared type "CustomeUrl"
"Literal['s']" is incompatible with "CustomeUrl"
Der Grund, warum ich mich für Annotated entschieden habe besteht darin, sicherzustellen, dass die Typprüfung gültig ist, sodass ich nicht glaube, dass sie mein Problem löst.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post