Python中的默认值是什么?
屈服Python中的默认值是什么?,python,pickle,Python,Pickle,屈服 (,(,无)) 这个函数是什么。它既不是B,B.\uuuuu init\uuuuu,也不是B.\uuuu new\uuuuuuuu,正如我预期的那样。我必须做两个更改才能得到这个结果: 将类的名称从A更改为B 删除外部的pickle.dumps()调用 在任何情况下,pickle都可以自由地执行它喜欢的任何操作来重建对象;-)在这种情况下,您可以在Lib/copyreg.py中找到\u recostructor()函数 在IPython中,它告诉我它实际上是copy\u reg.\u re
(,(,无))
这个函数是什么。它既不是
B
,B.\uuuuu init\uuuuu
,也不是B.\uuuu new\uuuuuuuu
,正如我预期的那样。我必须做两个更改才能得到这个结果:
A
更改为B
pickle.dumps()
调用在任何情况下,
pickle
都可以自由地执行它喜欢的任何操作来重建对象;-)在这种情况下,您可以在Lib/copyreg.py
中找到\u recostructor()
函数 在IPython中,它告诉我它实际上是copy\u reg.\u restructor
。在您的例子中,除了调用B.\uuuuu new\uuuuuuuu()
,以及调用B.\uuuuuuuu init\uuuuuuuuuuuuu()
(如果类重写它的话)之外,它没有什么作用。(另外,我猜为\u重构器(
会告诉您这一点。)米利穆斯:你的第一条评论不应该是回答,而不是评论,应该是关于问题的吗?(或者像这条评论一样,关于评论,也不如完整的回答有用。)“无论如何,pickle可以随心所欲地做任何事”:您肯定不是说pickle是任意的和随机的?它必须遵循确定性算法,例如:如果实例的类是普通(不是扩展)类,那么…否则如果实例的类是扩展类,那么如果该类定义了reduce,则调用它,否则如果注册了reduce函数(使用copy_reg模块)然后调用reduce函数。我的描述可能是错误的:为什么一个类应该有一个默认的reduce方法,为什么它在copy_reg模块中定义?@bootchk,pickle可以“做任何它喜欢的事情”与它的文档和用途一致。不能保证在不同版本或pickle协议中对同一对象进行pickle会产生相同的pickle字符串,甚至在单个版本中,pickle
和cPickle
可能会对同一对象产生不同的pickle。类实例的pickle是一个复杂的问题因为Python2中的类有两种风格(“经典”和“新风格”),并且在几个pickle协议版本中定义了几个实例pickle方案。
import pickle
class A:
pass
pickle.dumps(B().__reduce__())