Код: Выделить всё
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()
)
Код: Выделить всё
class Test1(BaseModel):
pass
class Test2(BaseModel):
pass
def test() -> OcpiResponse[Test2]:
return OcpiResponse.success(Test1())
- (TypeError: typing.Self не подлежит подписке). Мне этот синтаксис показался бы наиболее логичным.
Код: Выделить всё
Self[T] - (не фиксирует параметр типа).
Код: Выделить всё
Self - (Неразрешенная ссылка «OcpiResponse»). Хотя метод, не являющийся классом, набранный таким образом, на самом деле не выдает предупреждений, которые я ожидал бы в случае несоответствия типов.
Код: Выделить всё
OcpiResponse[T] - (Неразрешенная ссылка «cls»).
Код: Выделить всё
cls[T]
Подробнее здесь: https://stackoverflow.com/questions/771 ... nericmodel