为什么这对我的情况不起作用?
# Windows 10
# Python 3.11.8
# Pydantic 2.7.3
# Mypy 1.10.0
"""mypy.ini
[mypy]
plugins = pydantic.mypy
"""
# https://stackoverflow.com/questions/69433904/assigning-pydantic-fields-not-by-alias
from pydantic import BaseModel, Field, ConfigDict
class Params(BaseModel):
var_name: int = Field(alias='var_alias')
model_config = ConfigDict(
populate_by_name=True,
)
Params(var_alias=5) # no works
Params(var_name=5) # works
"""
mypy .\tess.py
tess.py:20: error: Missing named argument "var_name" for "Params" [call-arg]
Found 1 error in 1 file (checked 1 source file)
"""
我的代码与不通过别名分配 Pydantic 字段相同,但我收到错误,我不明白为什么
预计:
mypy .\tess.py
Success: no issues found in 1 source file
似乎您需要添加默认值才能工作:
[mypy]
plugins = pydantic.mypy
from pydantic import BaseModel, Field, ConfigDict
class Params(BaseModel):
var_name: int = Field(42, alias='var_alias')
model_config = ConfigDict(
populate_by_name=True,
)
Params(var_alias=5) # now works too
Params(var_name=5) # works
Success: no issues found in 1 source file