Как ввести подсказку для метода фабричного класса для pydantic GenericModelPython

Программы на Python
Anonymous
Как ввести подсказку для метода фабричного класса для pydantic GenericModel

Сообщение Anonymous »

У меня есть следующий класс с параметром типа, определенным с использованием GenericModel pydantic.

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

from datetime import datetime
from typing import Generic, TypeVar
from pydantic import BaseModel
from pydantic.generics import GenericModel

T = TypeVar("T", bound=BaseModel)

class OcpiResponse(GenericModel, Generic[T]):
data: T
status_code: int
status_message: str
timestamp: str

@classmethod
def success(cls, data: Generic[T]):
return cls(
data=data,
status_code=1000,
status_message="Success",
timestamp=datetime.now().isoformat()
)
Как добавить тип возвращаемого значения в метод успеха таким образом, чтобы он фиксировал параметр типа? Под этим я подразумеваю, что следующее должно выдать ошибку/предупреждение в IDE:

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

class Test1(BaseModel):
pass

class Test2(BaseModel):
pass

def test() -> OcpiResponse[Test2]:
return OcpiResponse.success(Test1())
Я пробовал:
  • (TypeError: typing.Self не подлежит подписке). Мне этот синтаксис показался бы наиболее логичным.
  • (не фиксирует параметр типа).
  • Код: Выделить всё

    OcpiResponse[T]
    (Неразрешенная ссылка «OcpiResponse»). Хотя метод, не являющийся классом, набранный таким образом, на самом деле не выдает предупреждений, которые я ожидал бы в случае несоответствия типов.
  • (Неразрешенная ссылка «cls»).


Подробнее здесь: https://stackoverflow.com/questions/771 ... nericmodel

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