Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的默认值是什么?_Python_Pickle - Fatal编程技术网

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__())