Как создать управляемый атрибут, совместимый с Pydantic?Python

Программы на Python
Ответить
Anonymous
 Как создать управляемый атрибут, совместимый с Pydantic?

Сообщение Anonymous »

У меня есть модель, в которой мне нужно выполнять некоторую работу каждый раз, когда устанавливается значение. Обычно я использую управляемое свойство. Однако я хочу проверять новое значение (используя Pydantic), когда оно остается неподвижным. Я пробовал использовать @validate_call, но он не вызывает ожидаемых ошибок ValidationError для неверных входных данных. Ниже приведен макет кода.

Код: Выделить всё

from pydantic import BaseModel, validate_call

P = TypeVar("P", covariant=True)

class ManagedNode(BaseModel, Generic[P]):
_parent: Optional[weakref.ref] = None

@property
def parent(self) -> Optional[P]:
return self._parent() if self._parent is not None else None

@parent.setter
@validate_call
def parent(self, parent: P):  # type: ignore
self._parent = weakref.ref(parent) if parent is not None else None

class A:
pass

class B:
pass

ManagedNode[A]().parent = B()  # this does not raise a ValidationError
Есть ли лучший подход к управляемым атрибутам с помощью Pydantic?
Использование Pydantic V2 (2.9.2)
(Обратите внимание, что существует отдельная проблема, связанная с тем, что P является ковариантным и используется в качестве параметра метода, поэтому тип #: игнорировать)

Подробнее здесь: https://stackoverflow.com/questions/791 ... h-pydantic
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»