我想修改映射/lambda中的数据类(dataclass_json(。有了字典,你可以在lambda中执行dict.update({quot;key":quot;value"}(,但如何在没有的情况下更新数据类的值
MyDataClass.name = "class name" # this works outside a lambda
(下面的例子是我所知道的不正确的语法(
repositories_list: List[MyDataClass]
_ = list(map(lambda repository: repository.name = my_func(repository), repositories_list))
当然,我不能只使用=,那么这是怎么做到的呢?
您可以直接访问setattr
,即在属性分配期间执行实际工作的函数:
list(map(lambda r: setattr(r, "name", my_func(repository)), repositories_list))
这个模式不是特定于数据类的,它适用于任何python对象。
用替换数据类解决了它
from dataclasses import replace
repositories_list = list(map(lambda repository: replace(repository, name=my_func(repository)), repositories_list))