So geben Sie eine generische Python -Signatur zum Rückgabetyp an und verwenden Sie den Typ in der FunktionPython

Python-Programme
Anonymous
 So geben Sie eine generische Python -Signatur zum Rückgabetyp an und verwenden Sie den Typ in der Funktion

Post by Anonymous »

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post