4

ピクルスの問題に遭遇しました。コードは次のとおりです。

import cPickle

class A(object):

    def __init__(self):
        self.a = 1

    def methoda(self):
        print(self.a)


class B(object):

    def __init__(self):
        self.b = 2
        a = A()
        self.b_a = a.methoda

    def methodb(self):
        print(self.b)
if __name__ == '__main__':
    b = B()
    with open('best_model1.pkl', 'w') as f:
        cPickle.dump(b, f)

エラーは次のとおりです。

ファイル "/usr/lib/python2.7/copy_reg.py"、70 行目、_reduce_ex で TypeError、"can't pickle %s objects" % base. name TypeError: インスタンスメソッド オブジェクトをピクルできません

4

2 に答える 2

3

dillの代わりに使えばできますcPickle

>>> import dill     
>>> 
>>> class A(object):
...   def __init__(self):
...     self.a = 1
...   def methods(self):
...     print(self.a)
... 
>>> 
>>> class B(object):
...   def __init__(self):
...     self.b = 2
...     a = A()
...     self.b_a = a.methods
...   def methodb(self):
...     print(self.b)
... 
>>> b = B()
>>> b_ = dill.dumps(b)
>>> _b = dill.loads(b_)
>>> _b.methodb()
2
>>> 

参照: Python のマルチプロセッシング Pool.map() を使用している場合、<type 'instancemethod'> をピクルできません

于 2015-12-21T17:27:37.563 に答える