簡體   English   中英

如何忽略pydantic中的字段repr?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM