使用kwargs Python传递参数,但保持类型检查

时间:2020-04-20 16:09:06

标签: python mypy

我在Python中有一个通用模式,该模式使用kwargs将对象的某些键传递给另一个函数,该函数采用带有一些添加/删除键的相似对象。一个例子是获取DTO,将其转换并将其写入数据库。

class FooUpdateDTO:
  foo: str

class FooModel:
  foo: str
  bar: str

def foo(dto: FooUpdateDTO):
  model: FooModel = FooModel(bar="bar", **dto.dict())
  self.update(model)

def update(model: FooModel):
  # do things 
  pass

现在,如果模型如下所示发生变化,我希望看到需要更新FooUpdateDTO的类型错误。

class FooModel:
  foo: int # <-- type changed
  bar: str

但是我没有。

无需手动写出参数即可完成此工作的最佳方法是什么。

def foo(dto: FooUpdateDTO):
  # model: FooModel = FooModel(bar="bar", **dto.dict()) # short and clean
  model: FooModel = FooModel(bar="bar", foo=dto.foo) # long, verbose, and repetitive
  self.update(model)

0 个答案:

没有答案