2014-11-21 1 views
1

В python, что такое method_descriptor (на простом английском языке)?В python, что такое method_descriptor?

У меня была эта ошибка, и я не могу найти какую-либо информацию о нем ...

*** TypeError: can't pickle method_descriptor objects 
+2

Не могли бы вы выслать код, который привел к этой ошибке? – aensm

+0

Я подозреваю, что вы где-то забыли свои круглые скобки для вызова функций, поэтому ваш код пытается рассортировать метод вместо его возвращаемого значения. – user2357112

+0

Возможный дубликат [Static vs instance methods of str в Python] (http://stackoverflow.com/questions/1180303/static-vs-instance-methods-of-str-in-python) – davidism

ответ

0

method_descriptor нормальный класс с __ __ получить, __ __ установить и __ __ дель методов. Вы можете проверить ссылку для получения дополнительной информации на Static vs instance methods of str in Python

-1

Переключить на dill.

Я не заинтересован в отладке эту ошибку ...

Вы должны быть. Если вы не заинтересованы в ошибках отладки, вы попали в неправильное поле. Ради вежливой аргументации, давайте любезно предположим, что вы создали that comment под давлением необоснованного срока. (Случается.)

Стандартный pickle модуль не способен сериализации так называемые «экзотические виды», включая, но предположительно не ограничены: функции с yields, вложенных друг в друга функции, лямбды, клетки, методы, несвязанный методы, модули, диапазоны, ломтики, code объектов, methodwrapper объектов, dictproxy объектов, getsetdescriptor объектов, memberdescriptor объектов, wrapperdescriptor объектов, notimplemented объектов, ellipsis объектов, quit объектов и (... вдумайтесь!) method_descriptor объектов.

Все не потеряно, однако. Третья сторона dill package- это, способная сериализовать все эти типы и существенно больше. Так как dill является заменой на pickle, глобально заменяя все вызовы через вашу кодовую базу на функцию pickle.dump() с эквивалентной функцией dill.dump(). должно достаточно, чтобы рассортировать описательные дескрипторы метода.

Я просто хочу знать, что такое method_descriptor, на простом английском языке.

Нет, вы этого не сделаете. Там - это нет простого объяснения дескрипторов метода, потому что описательные дескрипторы метода descriptor protocol - это восхитительно темное вуду.

Это вуду, потому что это должно быть; это фундаментальная основа для основной реализации Python функций, свойств, статических методов и методов класса. Темно, потому что только сокращающаяся кабала скрытных питонистов на самом деле способна правильно реализовать дескриптор в дикой природе. Это вкусно, потому что сила, которая в частности обеспечивает data descriptors, является непарной в экосистеме Python.

К счастью, вам не нужно , чтобы узнать, какие дескрипторы метода должны их рассолить. Вам нужно только переключиться на dill.

+0

Классический stackoverflow, покровительствующий «вы задаете неправильный вопрос и не знаете, что хотите». Один для книги. – David