Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Cloudpickle and data classes do not play well together

未关闭
#424 3 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
42/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
停滞
技术栈
python
领域
tooling

调研方向

首先运行 issue 中的 dataclass/cloudpickle 复现,并跟踪重建该类的加载路径。完成的标准是恢复后的值保留其 dataclass 字段,并且有一个回归测试覆盖所演示的情况。

由索引模型根据 Issue 内容生成。

描述

When restoring a value of a dataclass with cloudpickle, it breaks:

Example

import dataclasses
from dataclasses import dataclass


@dataclass
class Range:
    start: int
    end: int


v = Range(1, 2)
print("defined")
print(dataclasses.fields(v))

import cloudpickle

print("imported cloudpickle")
print(dataclasses.fields(v))

v_dumped = cloudpickle.dumps(v)

print("dumped with cloudpickle")
print(dataclasses.fields(v))

vv = cloudpickle.loads(v_dumped)
print("loaded with cloudpickle")
print(dataclasses.fields(v))

print("restored value")
print(dataclasses.fields(vv))

Leads to

defined
(Field(name='start',type=<class 'int'>,default=<dataclasses._MISSING_TYPE object at 0x109634ca0>,default_factory=<dataclasses._MISSING_TYPE object at 0x109634ca0>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD), Field(name='end',type=<class 'int'>,default=<dataclasses._MISSING_TYPE object at 0x109634ca0>,default_factory=<dataclasses._MISSING_TYPE object at 0x109634ca0>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD))
imported cloudpickle
(Field(name='start',type=<class 'int'>,default=<dataclasses._MISSING_TYPE object at 0x109634ca0>,default_factory=<dataclasses._MISSING_TYPE object at 0x109634ca0>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD), Field(name='end',type=<class 'int'>,default=<dataclasses._MISSING_TYPE object at 0x109634ca0>,default_factory=<dataclasses._MISSING_TYPE object at 0x109634ca0>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD))
dumped with cloudpickle
(Field(name='start',type=<class 'int'>,default=<dataclasses._MISSING_TYPE object at 0x109634ca0>,default_factory=<dataclasses._MISSING_TYPE object at 0x109634ca0>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD), Field(name='end',type=<class 'int'>,default=<dataclasses._MISSING_TYPE object at 0x109634ca0>,default_factory=<dataclasses._MISSING_TYPE object at 0x109634ca0>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD))
loaded with cloudpickle
()
restored value
()

I.e. as soon as we restore, the type of the data class is destroyed

主要语言
Python
星标
1.9k
派生
197
平均合并
1 天 10 小时
30 天内合并 PR
1

环境准备

我们还没有检查这个项目的环境配置文件。先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

cloudpipe/cloudpickle 的其他 Issue

查看 cloudpipe/cloudpickle 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。