gpt4 book ai didi

Python:pickle 错误:__new__() 恰好需要 2 个参数(给定 1 个)

转载 作者:太空宇宙 更新时间:2023-11-03 14:18:43 24 4
gpt4 key购买 nike

相关:pickle load error "__init__() takes exactly 2 arguments (1 given)"

import cPickle as pickle

pklfile = "test.pkl"

all_names = {}
class Name(object):
def __new__(cls, c, s="", v=""):
name = "%s %s %s" % (c, s, v)
if all_names.has_key(name):
return all_names[name]
else:
self = all_names[name] = object.__new__(cls)
self.c, self.s, self.v = c, s, v

return self

with open(pklfile, 'wb') as output:
pickle.dump(Name("hi"), output, pickle.HIGHEST_PROTOCOL)

with open(pklfile, 'rb') as input:
name_obj = pickle.load(input)

输出:

Traceback (most recent call last):
File "dopickle.py", line 21, in <module>
name_obj = pickle.load(input)
TypeError: __new__() takes at least 2 arguments (1 given)

是否可以在不将第二个参数作为可选参数的情况下完成这项工作?

最佳答案

使用 __getnewargs__,它会在对象被 pickle 时调用,并提供一个额外参数的元组,以便在 unpickling 时传递给 __new__

import cPickle as pickle

pklfile = "test.pkl"

all_names = {}
class Name(object):
def __new__(cls, c, s="", v=""):
name = "%s %s %s" % (c, s, v)
if all_names.has_key(name):
return all_names[name]
else:
self = all_names[name] = object.__new__(cls)
self.c, self.s, self.v = c, s, v

return self

def __getnewargs__(self):
return (Name.__repr__(self),)

def __repr__(self):
return '<Name %r, %r, %r>' % (self.c, self.s, self.v)

def __str__(self):
return "%s %s %s" % (self.c, self.s, self.v)

with open(pklfile, 'wb') as output:
pickle.dump(Name("hi"), output, pickle.HIGHEST_PROTOCOL)

with open(pklfile, 'rb') as input:
name_obj = pickle.load(input)
print name_obj

关于Python:pickle 错误:__new__() 恰好需要 2 个参数(给定 1 个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30829189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com