在 Python 中,什么是 method_descriptor(简单的英语)?
我有这个错误,我真的找不到任何关于它的信息:
*** TypeError: can't pickle method_descriptor objects
最佳答案
切换到dill
.
I am not interested in debugging this error...
您应该如此。如果您对调试错误不感兴趣,那么您来错地方了。为了礼貌的争论,让我们慷慨地假设你创作了that comment。在不合理的最后期限的胁迫下。 (它发生了。)
标准 pickle
模块无法序列化所谓的“奇异类型”,包括但可能不限于:具有yields
的函数、嵌套函数、lambda、单元格、方法、未绑定(bind)方法、模块、范围、切片、code
对象、methodwrapper
对象、dictproxy
对象、getsetdescriptor
对象,memberdescriptor
对象,wrapperdescriptor
对象,notimplemented
对象,ellipsis
对象,quit
对象,和(...等待它!)method_descriptor
对象。
然而,一切并没有丢失。第三方dill
package 能够序列化所有这些类型,甚至更多。由于 dill
是 pickle
的直接替代品,因此可以在全局范围内将代码库中对 pickle.dump()
函数的所有调用替换为等效的dill.dump()
函数应该足以处理有问题的方法描述符。
I just want to know what a
method_descriptor
is, in plain English.
不,你不知道。 没有对方法描述符的通俗易懂的解释,因为 descriptor protocol底层方法描述符是美味的黑暗巫术。
这是巫术,因为它必须是;它是 Python 的函数、属性、静态方法和类方法的核心实现的基础。它是黑暗的,因为只有越来越少的神秘 Pythonista cabal 实际上能够在野外正确地实现描述符。很好吃,因为data descriptors的力量特别是 provide 在 Python 生态系统中是无与伦比的。
幸运的是,您不需要知道用什么方法描述符来腌制它们。你只需要切换到dill
.
关于python - 在 Python 中,什么是 method_descriptor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27068154/