当我使用Pydantic 文档中的这样的代码片段时,我的类型检查器会对我抱怨:
from datetime import datetime
from pydantic import BaseModel, validator
class DemoModel(BaseModel):
ts: datetime = None # Expression of type "None" cannot be
# assigned to declared type "datetime"
@validator('ts', pre=True, always=True)
def set_ts_now(cls, v):
return v or datetime.now()
Run Code Online (Sandbox Code Playgroud)
到目前为止我的解决方法是:
ts: datetime = datetime(1970, 1, 1) # yuck
Run Code Online (Sandbox Code Playgroud)
ts: datetime = None # type: ignore
Run Code Online (Sandbox Code Playgroud)
ts: Optional[datetime] = None # Not really true. `ts` is not optional.
Run Code Online (Sandbox Code Playgroud)
是否有解决这个难题的首选方法?
或者是否有我可以使用的类型检查器不介意这一点?
Oga*_*day 22
新答案
使用 aField和 adefault_factory作为动态默认值:
from datetime import datetime
from pydantic import BaseModel, Field
class DemoModel(BaseModel):
ts: datetime = Field(default_factory=datetime.now)
Run Code Online (Sandbox Code Playgroud)
您的类型提示是正确的,linter 很高兴并且DemoModel().ts is not None.
来自Field文档:
default_factory:一个零参数可调用函数,当该字段需要默认值时将被调用。除其他目的外,这可用于设置动态默认值。
如果该字段是必需的,那么您只需不提供默认值即可:
class DemoModel(BaseModel):
ts: datetime
Run Code Online (Sandbox Code Playgroud)
DemoModel如果您在这种情况下不提供参数,Pydantic 将阻止您实例化 的实例ts。
| 归档时间: |
|
| 查看次数: |
20199 次 |
| 最近记录: |