无法使用lambda默认值腌制数据类

时间:2018-12-20 17:57:17

标签: python pickle joblib python-dataclasses

据我所知,如果我有一个简单的dataclass且具有可变的默认值,则需要使用default_factory

但是,由于存在lambda,这使得该类无法被选中:

@dataclass
class ExperimentConfig:

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

所以,如果我们腌制它:

import cloudpickle
c = ExperimentConfig()
cloudpickle.dumps(c)

腌制将返回:

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
         )
}

如何使班级可腌制?我需要这样做,以便通过Paralleljoblib作业上发送它。

0 个答案:

没有答案