#python #pydantic
#python #pydantic
Вопрос:
Существует множество решений для перезаписи методов в экземплярах. Но для объекта базовой модели pydantic это кажется проблематичным. Это простой пример:
from pydantic import BaseModel
class Dog(BaseModel):
def bark(self):
print("WOOF")
def new_bark():
print("WoOoOoF!!")
Запуск метода:
>>> boby = Dog()
>>> boby.bark()
WOOF
Перезапись метода:
>>> boby.bark = new_bark
>>> boby.bark()
ValueError: "Dog" object has no field "bark"
Ожидаемым результатом будет напечатанный # WoOoOoF!!
. Если Dog
не наследует pydantics BaseModel
, вы получаете ожидаемый результат.
Возможно ли это вообще?
Комментарии:
1. Разве вы не должны определять new_bark с одним параметром?
Ответ №1:
Я думаю, что проблема каким-то образом связана с __setattr__
методом pydantic. Это несколько отличается от обычных объектов. По этой ссылке люди имеют дело с (не такой же, но похожей) проблемой. https://github.com/samuelcolvin/pydantic/issues/655
Я не знаю внутренних деталей pydantic или причины проблемы, но я думаю, что этот код решит вашу проблему:
>>> object.__setattr__(boby, "bark", new_bark)
>>> boby.bark()
WoOoOoF!!