嵌套 Pydantic 模型和泛型

问题描述 投票:0回答:1

我试图通过在 python 中使用泛型类型来减少一些代码重复。通过这个最小的例子

from typing import Generic, TypeVar
from pydantic import BaseModel

T = TypeVar("T")

class Foo(BaseModel, Generic[T]):
    a: T

Bar = list[Foo[T]]

class Baz(BaseModel, Generic[T]):
    b: Bar[T]

我收到以下类型错误:

TypeError:列表[main.Foo]中没有剩余类型变量

如果我用

Bar
替换
Baz
类中的别名
list[Foo[T]]
,一切正常,那么这是别名的普遍问题吗?谢谢。

python generics pydantic
1个回答
0
投票

你不需要再次占卜Bar[T]:

class Baz(BaseModel, Generic[T]):
    b: Bar

因此

b
被定义为
Bar
,您已经给出了通用
[T]
的列表。

from typing import Generic, TypeVar
from pydantic import BaseModel

T = TypeVar("T")

class Foo(BaseModel, Generic[T]):
    a: T

Bar = list[Foo[T]]

class Baz(BaseModel, Generic[T]):
    b: Bar
© www.soinside.com 2019 - 2024. All rights reserved.