[英]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
這樣的選項嗎?
但是,它似乎還沒有進入最新版本。
我看到兩個選項如何啟用該功能:
1. 使用功能請求中提供的解決方法
定義一個輔助類:
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'
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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.