如何忽略 pydantic 中的现场代表?
How to ignore field repr in pydantic?
当我想使用 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
这样的选项吗?
看起来这个功能 requested and also implemented 不久前。
但是,它似乎还没有进入 latest release。
我看到了两个如何启用该功能的选项:
1.使用 feature request
中提供的解决方法
定义一个助手class:
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'
当我想使用 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
这样的选项吗?
看起来这个功能 requested and also implemented 不久前。
但是,它似乎还没有进入 latest release。
我看到了两个如何启用该功能的选项:
1.使用 feature request
中提供的解决方法定义一个助手class:
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'