gpt4 book ai didi

python - 如何忽略 pydantic 中的现场代表?

转载 作者:行者123 更新时间:2023-12-05 09:31:23 25 4
gpt4 key购买 nike

当我想使用 attr 库忽略某些字段时,我可以使用 repr=False 选项。
但是我在 pydantic 中找不到类似的选项

请看示例代码

import typing
import attr

from pydantic import BaseModel


@attr.s(auto_attribs=True)
class AttrTemp:
foo: typing.Any
boo: typing.Any = attr.ib(repr=False)


class Temp(BaseModel):
foo: typing.Any
boo: typing.Any # I don't want to print

class Config:
frozen = True


a = Temp(
foo="test",
boo="test",
)
b = AttrTemp(foo="test", boo="test")
print(a) # foo='test' boo='test'
print(b) # AttrTemp(foo='test')

但是,这并不意味着完全没有选项,我可以使用语法 print(a.dict(exclude={"boo"}))

难道 pydantic 没有像 repr=False 这样的选项吗?

最佳答案

看起来这个功能已经requestedalso implemented不久前。

但是,它似乎还没有进入 latest release还没有。

无论如何,我看到两个选项如何启用该功能:

<强>1。使用 feature request 中提供的解决方法

定义一个辅助类:

import typing
from pydantic import BaseModel, Field

class ReducedRepresentation:
def __repr_args__(self: BaseModel) -> "ReprArgs":
return [
(key, value)
for key, value in self.__dict__.items()
if self.__fields__[key].field_info.extra.get("repr", True)
]

并在您的 Model 定义中使用它:

class Temp(ReducedRepresentation, BaseModel):
foo: typing.Any
boo: typing.Any = Field(..., repr=False)

class Config:
frozen = True

a = Temp(
foo="test",
boo="test",
)
print(a)
# foo='test'

<强>2。 pip install 最新的master

我建议在虚拟环境中执行此操作。这对我有用:

卸载现有版本:

$ pip uninstall pydantic
...

安装最新的master:

$ pip install git+https://github.com/samuelcolvin/pydantic.git@master
...

之后 repr 参数应该开箱即用:

import typing
from pydantic import BaseModel, Field

class Temp(BaseModel):
foo: typing.Any
boo: typing.Any = Field(..., repr=False)

class Config:
frozen = True

a = Temp(
foo="test",
boo="test",
)
print(a)
# foo='test'

关于python - 如何忽略 pydantic 中的现场代表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68768017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com