Как да избирам типове методи на клас Python? Не е внедрен в стандартната библиотека. Открих, че мога да използвам някои модули на трети страни като dill
, но как да го направя само с pickle.
Подготвих тестов код, за да опростя този въпрос:
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. Използването на паметта е малко високо първоначално b/c той изгражда и регистрира (в регистъраpickle
) минимална версия на много от обектите в стандартната библиотека. Допълнителната памет, консумирана след импортиране, е минимална. - person Mike McKerns   schedule 20.02.2015self
като параметър - това ще позволи добро наследяване и кодът ще бъде лек, което ми харесва. - person Chameleon   schedule 22.02.2015