无法使用lambda defau pickle dataclass

2024-04-23 22:28:41 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个简单的dataclass,那么据我所知,我需要使用default_factory

但是,由于lambda,这使得类不可拾取:

@dataclass
class ExperimentConfig:

    features: List[str] = field(
        default_factory=lambda: ["value1", "value2"])  

所以如果我们腌制它:

^{pr2}$

酸洗会返回:

TypeError: can't pickle mappingproxy objects

这是由于mappingproxy对象在c.__dataclass_fields__中可见:

{'features': 
    Field(name='features',
          type=typing.List[str],
          default=<dataclasses._MISSING_TYPE object at 0x7f6ca8434588>,
          default_factory=<function ExperimentConfig.<lambda> at 0x7f6c9951b268>,
          init=True,
          repr=True,
          hash=None,
          compare=True,
          metadata=mappingproxy({}),
          _field_type=_FIELD
         )
}

我怎样才能使这门课变酸呢?我需要这样做,以便在Parallel作业中使用joblib发送它。


Tags: lambdatruedefaultfieldfactorytypeatlist