by Guest » 14 Jan 2025, 10:55
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
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.
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]T = TypeVar('T')
CustomUrl = Annotated[str, T]
[/code]
Aber ich erhalte diese Fehlermeldung, wenn ich versuche, es auf diese Weise zu verwenden:
[code]CustomUrl[MyData()]
# TypeError: typing.Annotated[str, ~T] is not a generic class
[/code]
Ich habe keine Ahnung, warum das passiert, und es funktioniert gut, wenn ich die Reihenfolge umkehre zu
[code]CustomUrl[T, str]
[/code]
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]# pseudo code
@dataclass
class TaskArgs:
input_text: Annotated[str, {'multiline': True}]
input_file: Annotated[str, {'multifiles': True}]
[/code]
Update
Ich habe die folgende Antwort ausprobiert:
[code]from typing import Annotated, TypeVar
T = TypeVar('T')
class CustomeUrl(Annotated[str, T]):
...
c: CustomeUrl = 's'
[/code]
Das Problem ist, dass der letzte Ausdruck den Fehler auslöst:
[code]Expression of type "Literal['s']" is incompatible with declared type "CustomeUrl"
"Literal['s']" is incompatible with "CustomeUrl"
[/code]
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.