首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pydantic实例上的Overwrite方法

Pydantic实例上的Overwrite方法
EN

Stack Overflow用户
提问于 2021-01-23 16:47:36
回答 1查看 113关注 0票数 2

有许多解决方案可用于覆盖实例上的方法。但是对于pydantic BaseModel的对象来说,这似乎是有问题的。这是一个简单的例子:

代码语言:javascript
复制
from pydantic import BaseModel

class Dog(BaseModel):
    def bark(self):
        print("WOOF")

def new_bark():
    print("WoOoOoF!!")

运行该方法:

代码语言:javascript
复制
>>> boby = Dog()
>>> boby.bark()
WOOF

覆盖该方法:

代码语言:javascript
复制
>>> boby.bark = new_bark
>>> boby.bark()
ValueError: "Dog" object has no field "bark"

预期的结果将是一个打印的# WoOoOoF!!。如果Dog没有继承pydantics BaseModel,那么您将获得预期的结果。

这有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-23 17:21:32

我认为这个问题与pydantic的__setattr__方法有某种关系。这是与普通对象的一些不同之处。在这个链接中,人们处理(不是相同但相似的)问题。https://github.com/samuelcolvin/pydantic/issues/655

我不知道pydantic的内部细节或问题的原因,但我认为这段代码可以解决您的问题:

代码语言:javascript
复制
>>> object.__setattr__(boby, "bark", new_bark)
>>> boby.bark()
WoOoOoF!!
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65857313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档