美文网首页
继承BaseModel 报错AttributeError: __

继承BaseModel 报错AttributeError: __

作者: RedB | 来源:发表于2022-01-17 18:24 被阅读0次

Bug经历

最近在写FastAPI的登录与注册,想要基于ResponseBody,派生出SuccessResponseBody和ErrorResponseBody。于是写了这么一段代码:

# schemas.py
class RespBody(BaseModel):
    code: int
    data: Optional[dict]
    msg: Optional[str]
class SuccessRespBody(RespBody):
    def __init__(self, data: dict):
        self.code = 0
        self.data = data
# main.py
@app.post("/token", response_model=RespBody)
def login_for_access_token(...):
    ....
    return SuccessRespBody({"access_token":access_token})

结果报了错AttributeError: __fields_set__

解决办法

经过大佬的指点,最终找到了官方文档里,BaseModel继承的写法:https://pydantic-docs.helpmanual.io/usage/models/#model-signature
正确代码如下:

class RespBody(BaseModel):
    code: int
    data: Optional[dict]
    msg: Optional[str]
class SuccessRespBody(RespBody):
    def __init__(self, data: dict):
        # super().__init__()如果不调用,父类的__init__就不会被调用,就会出错
        super().__init__(code = 0, data = data)

相关文章

网友评论

      本文标题:继承BaseModel 报错AttributeError: __

      本文链接:https://www.haomeiwen.com/subject/bnochrtx.html