【发布时间】:2020-01-24 18:54:07
【问题描述】:
在我的类方法中,我使用 count 生成唯一 ID,我希望将其存储在类中:
from collections import Counter, defaultdict
import pickle
class A:
def __init__(self):
self.models = {}
def func1(self, data, names):
ll = []
for n, seq_list in enumerate(data):
__counter = count(start=0)
def _genid():
return next(__counter)
__ids = defaultdict(_genid)
# Here we process seq_list and fill __ids
# ...
self.models[name] = [None, None, None, __ids]
def save_models(self, obj, filename="models.bin"):
try:
with open(filename, 'wb') as f:
pickle.dump(obj, f)
except IOError as e:
raise Exception("Failed to open file for writing: %s" % e)
...
data = [['A', 'BB', 'B', 'B', 'B'],
[['C', 'D', 'E', 'B'], ['E', 'B'], ['C', 'D', 'E', 'B', 'B', 'F']],
['A', 'G'],
[['AA', 'C', 'B', 'B'], ['F', 'D'], ['BB', 'E', 'E', 'F', 'B', 'A']]]
names = ['name1', 'name2', 'name3', 'name4'
aclass = A()
aclass.func1(data, names)
aclass.save_models(aclass)
此时save_models() 产生错误:AttributeError: Can't pickle local object 'A.func1.._genid'
所以我有两个问题:
- 有没有办法让pickle 保存我的课程?
- 如果没有,是否有更简单的方法将ids 存储在类中并能够腌制它?
【问题讨论】:
标签: python-3.x class dictionary