[Python] Why can't private attributes of Pydantic be mutable objects?

Discussão em 'Python' iniciado por Stack, Julho 13, 2025.

  1. Stack

    Stack Membro Participativo

    I used the following line of code

    _missing_attributes: list[str] = PrivateAttr(default_factory=list,)


    The following error occurred and I don't understand why

    File "/home/**/.venv/lib/python3.12/site-packages/pydantic/dataclasses.py", line 255, in create_dataclass
    cls = dataclasses.dataclass( # type: ignore[call-overload]
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib/python3.12/dataclasses.py", line 1268, in dataclass
    return wrap(cls)
    ^^^^^^^^^
    File "/usr/lib/python3.12/dataclasses.py", line 1258, in wrap
    return _process_class(cls, init, repr, eq, order, unsafe_hash,
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib/python3.12/dataclasses.py", line 994, in _process_class
    cls_fields.append(_get_field(cls, name, type, kw_only))
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib/python3.12/dataclasses.py", line 852, in _get_field
    raise ValueError(f'mutable default {type(f.default)} for field '
    ValueError: mutable default <class 'pydantic.fields.ModelPrivateAttr'> for field _missing_attributes is not allowed: use default_factory

    Continue reading...

Compartilhe esta Página