by Anonymous » 17 Mar 2025, 00:39
Ich versuche, eine Funktion zu schreiben, die eine Klasse als Argument nimmt, eine Instanz dieser Klasse zurückgibt, die in einen anderen Typ eingewickelt ist, und verwendet den Typ der Klasse zum internen Gießen. Es funktioniert mit einem einfachen Typ wie STR, aber nicht einer tatsächlichen Klasse. PrettyPrint-Override ">
Code: Select all
from typing import cast, Type, TypeVar, Generic, Optional, Any
from pydantic import BaseModel, UUID4
from typing_extensions import Annotated, TypeAliasType
from pydantic.functional_validators import BeforeValidator
from uuid import UUID
def api_fn(output_cls: Optional[Type[BaseModel]] = None):
return None # simplified for example code, signature cannot be changed, not my code
def amount_f(v: Any) -> float:
return 0.0 # simplified for example code
MyNumber = Annotated[float, BeforeValidator(amount_f)]
DataT = TypeVar('DataT')
class TypeWithId(BaseModel, Generic[DataT]):
value: DataT
id: UUID4
T = TypeVar('T')
OptionalWithId = TypeAliasType(
'OptionalWithId', Optional[TypeWithId[T]], type_params=(T,)
)
OutT = TypeVar('OutT')
def query(output_cls:Type[OutT]) -> OptionalWithId[OutT]:
ret = api_fn(output_cls=output_cls)
return TypeWithId(value=cast(OutT,ret), id=UUID('00000000-0000-0000-0000-000000000000'))
str_result = query(str)
print(str_result)
number_result = query(MyNumber)
print(number_result)
Die str_result funktioniert, aber die number_result gibt mir:
Code: Select all
27 26 error e-f-b Pyright [reportArgumentType]: Argument of type "type[OutT@query]" cannot be assigned to parameter "output_cls" of type "type[BaseModel] | None" in function "api_fn"
32 0 error e-f-b Pyright [reportUnknownVariableType]: Type of "number_result" is partially unknown
32 22 error e-f-b Pyright [reportArgumentType]: Argument of type "MyNumber" cannot be assigned to parameter "output_cls" of type "type[OutT@query]" in function "query"
33 6 error e-f-b Pyright [reportUnknownArgumentType]: Argument type is partially unknown
Ich versuche, eine Funktion zu schreiben, die eine Klasse als Argument nimmt, eine Instanz dieser Klasse zurückgibt, die in einen anderen Typ eingewickelt ist, und verwendet den Typ der Klasse zum internen Gießen. Es funktioniert mit einem einfachen Typ wie STR, aber nicht einer tatsächlichen Klasse. PrettyPrint-Override ">[code]from typing import cast, Type, TypeVar, Generic, Optional, Any
from pydantic import BaseModel, UUID4
from typing_extensions import Annotated, TypeAliasType
from pydantic.functional_validators import BeforeValidator
from uuid import UUID
def api_fn(output_cls: Optional[Type[BaseModel]] = None):
return None # simplified for example code, signature cannot be changed, not my code
def amount_f(v: Any) -> float:
return 0.0 # simplified for example code
MyNumber = Annotated[float, BeforeValidator(amount_f)]
DataT = TypeVar('DataT')
class TypeWithId(BaseModel, Generic[DataT]):
value: DataT
id: UUID4
T = TypeVar('T')
OptionalWithId = TypeAliasType(
'OptionalWithId', Optional[TypeWithId[T]], type_params=(T,)
)
OutT = TypeVar('OutT')
def query(output_cls:Type[OutT]) -> OptionalWithId[OutT]:
ret = api_fn(output_cls=output_cls)
return TypeWithId(value=cast(OutT,ret), id=UUID('00000000-0000-0000-0000-000000000000'))
str_result = query(str)
print(str_result)
number_result = query(MyNumber)
print(number_result)
[/code]
Die str_result funktioniert, aber die number_result gibt mir:
[code] 27 26 error e-f-b Pyright [reportArgumentType]: Argument of type "type[OutT@query]" cannot be assigned to parameter "output_cls" of type "type[BaseModel] | None" in function "api_fn"
32 0 error e-f-b Pyright [reportUnknownVariableType]: Type of "number_result" is partially unknown
32 22 error e-f-b Pyright [reportArgumentType]: Argument of type "MyNumber" cannot be assigned to parameter "output_cls" of type "type[OutT@query]" in function "query"
33 6 error e-f-b Pyright [reportUnknownArgumentType]: Argument type is partially unknown
[/code]