Как ввести подсказку для метода фабричного класса для 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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