如何使用 pydantic @compulated_field 解决 @property 的 mypy 错误?

问题描述 投票:0回答:2

我需要用 pydantic 的

@property
装饰
@computed_field
(自动生成键值对并将其包含在 FastAPI JSON 响应中)。 在以下示例中,mypy 显示错误。 如果出现错误,我该如何修复? 如果一切正确,我该如何禁用此 mypy 消息?

from pydantic import BaseModel, computed_field

class MyClass(BaseModel):

    value1: str
    value2: str

    @computed_field
    @property
    def joined_values(self) -> str:
        return self.value1 + self.value2


obj = MyClass(value1="1", value2="2")
print(f"{obj.joined_values=}")  # obj.joined_values='12'

我的错误:

$ mypy . 
stackperflow_pydantic_property.py:25: error: Decorators on top of @property are not supported  [misc]
Found 1 error in 1 file (checked 2 source files)

版本:

$ python -V
Python 3.10.11

$ pip list
mypy                  1.7.1
pydantic              2.5.2
python mypy pydantic
2个回答
3
投票

mypy 目前不支持此功能,请参阅文档中的警告。


0
投票

自从 https://github.com/python/mypy/issues/14461 被合并后,似乎在 mypy 上处理这个问题的正确方法是添加

# type: ignore[prop-decorator]
注释:

from pydantic import BaseModel, computed_field

class MyClass(BaseModel):

    value1: str
    value2: str

    @computed_field  # type: ignore[prop-decorator]
    @property
    def joined_values(self) -> str:
        return self.value1 + self.value2


obj = MyClass(value1="1", value2="2")
print(f"{obj.joined_values=}")  # obj.joined_values='12'
© www.soinside.com 2019 - 2024. All rights reserved.