Как распарить типы методов класса Python? Он не реализован в стандартной библиотеке. Я обнаружил, что могу использовать некоторые сторонние модули, такие как dill
, но как это сделать только с рассолом.
Я подготовил тестовый код, чтобы упростить этот вопрос:
import pickle
class Thing(object):
@staticmethod
def static_method():
print Thing.static_method.__name__
@classmethod
def class_method(cls):
print cls.class_method.__name__
def object_method(self):
print self.object_method.__name__
def main():
items = [Thing,
Thing(),
Thing.static_method,
Thing.class_method,
Thing.object_method,
Thing().object_method]
for i, item in enumerate(items):
try:
pickle.loads(pickle.dumps(item))
except Exception as ex:
print i, ex, item
if __name__ == '__main__':
main()
Как бороться с отсутствием поддержки pickle по умолчанию для методов в Python 2.7?
2 Can't pickle <function static_method at 0x025614F0>: it's not found as __main__.static_method <function static_method at 0x025614F0>
3 can't pickle instancemethod objects <bound method type.class_method of <class '__main__.Thing'>>
4 can't pickle instancemethod objects <unbound method Thing.object_method>
5 can't pickle instancemethod objects <bound method Thing.object_method of <__main__.Thing object at 0x024F71D0>>
dill
автор. Зачем придерживатьсяpickle
, когдаdill
может замариновать все вашиitems
? - person Mike McKerns   schedule 20.02.2015multiprocessing
, вы можете просто использовать мою вилкуmultiprocessing
под названиемpathos.multiprocessing
. Он использует сериализаторdill
, поэтому вы можете отправить любой из вашихitems
в функциюmap
. Например, см. stackoverflow.com/questions/1816958/ - person Mike McKerns   schedule 20.02.2015@staticmethod
. - person Chameleon   schedule 20.02.2015dill
, но не думаю, что это хорошо, потому что мои ограничения и не уверен, что это Чистый питон - это отличная работа, независимо от того, какой код нужно немного очистить / задокументировать, чтобы сделать эту библиотеку более популярной, это мое впечатление на первый взгляд . - person Chameleon   schedule 20.02.2015dill
как средство для обеспечения высокопроизводительных параллельных и распределенных вычислений в python. Использование памяти немного велико изначально, потому что он создает и регистрирует (в реестреpickle
) минимальную версию многих объектов стандартной библиотеки. Дополнительная память, потребляемая после импорта, минимальна. - person Mike McKerns   schedule 20.02.2015self
в качестве параметра - это позволит хорошее наследование, и код будет легким, что мне нравится. - person Chameleon   schedule 22.02.2015