You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在打印及调用pydantic数据模型时隐藏password等敏感变量

实现方案

你可以通过重写Pydantic模型的__str__和__repr__方法实现需求,无需手动拼接所有字段,保留Pydantic默认输出格式的同时仅替换敏感字段值,兼容打印和直接调用实例两种场景。

完整代码示例(Pydantic V2 版本,当前主流版本)

from pydantic import BaseModel

class myUserClass(BaseModel):
    # 注意Pydantic模型字段需要声明类型
    User: str = 'foo'
    Password: str = 'bar'
    # 定义敏感字段集合,后续新增敏感字段直接加在这里即可
    _SENSITIVE_FIELDS = {'Password'}

    def _get_masked_repr(self) -> str:
        # 导出模型所有字段为字典
        model_dict = self.model_dump()
        # 替换敏感字段值为***
        for field in self._SENSITIVE_FIELDS:
            if field in model_dict:
                model_dict[field] = '***'
        # 拼接为Pydantic默认的打印格式
        params = ', '.join([f"{k}={repr(v)}" for k, v in model_dict.items()])
        return f"{self.__class__.__name__}({params})"

    def __str__(self) -> str:
        return self._get_masked_repr()

    def __repr__(self) -> str:
        return self._get_masked_repr()

U = myUserClass()

print(U)
# 输出:myUserClass(User='foo', Password='***')

# 交互环境直接调用实例也会脱敏
U
# 输出:myUserClass(User='foo', Password='***')

Pydantic V1 版本适配

如果你用的是Pydantic V1,只需把代码里的self.model_dump()替换为self.dict()即可,其余逻辑完全一致。

逻辑说明

  • 打印实例时会调用类的__str__方法,直接输出实例时会调用__repr__方法,同时重写两个方法即可覆盖两种场景
  • 复用Pydantic自带的字段导出能力,不需要手动维护字段列表,新增字段时会自动纳入输出,仅过滤配置的敏感字段,完全保留原有输出格式

内容的提问来源于stack exchange,提问作者Phann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:57:03