是否可以腌制/莳萝an_instance
开发如下?
import dill
import pandas as pd
import numpy as np
from datetime import datetime, timezone
from dataclasses import make_dataclass, field
fields = [('float_val', float, field(default=np.nan)),
('df', pd.DataFrame, field(default_factory=pd.DataFrame)),
('int_val', int, field(default_factory=int)),
('time_val', datetime, field(default=datetime.now(timezone.utc)))]
Aclass = make_dataclass('Aclass', fields)
an_instance=Aclass()
dill.dump(an_instance, open('test.pkl', 'wb'))
转储给出 PicklingError: Can't pickle <class 'types.Aclass'>: it's not found as types.Aclass
最佳答案
感谢 @Tom Myddeltyn 的 Issue35510 错误跟踪器。 dill.dump
和 dill.load
通过使用 Aclass.__module__ = __name__
设置名称来工作。
完整代码如下:
fields = [('float_val', float, field(default=np.nan)),
('df', pd.DataFrame, field(default_factory=pd.DataFrame)),
('int_val', int, field(default_factory=int)),
('time_val', datetime, field(default=datetime.now(timezone.utc)))]
Aclass = make_dataclass('Aclass', fields)
Aclass.__module__ = __name__ # provide name for pickling the class
an_instance=Aclass()
dill.dump(an_instance, open('test.pkl', 'wb'))
dill.load(open('test.pkl', 'rb'))
关于python - Pickling 数据类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65382074/