Python pickle.load不执行我的Class __new__方法

时间:2016-12-08 11:04:24

标签: python pickle

我开发了一个需要在__new__方法中管理内存的类。 当我实例化一个对象时它很好用。 但是在使用pickle.load时不会执行__new__

   >>>import pickle 

   >>>class Foo(object):
    ...    def __new__(cls, *args, **kwds):
    ...        print('Foo:__new__')
    ...        print('args: [{}]'.format(args))
    ...        print('kwds: [{}]'.format(kwds))
    ...        return cls

    >>>foo = Foo()
    Foo:__new__
    args: [()]
    kwds: [{}]

    >>>fp=open('test.bin', 'wb')
    >>>pickle.dump(foo,fp)
    >>>fp.close()
    >>>fp=open('test.bin', 'rb')
    >>>foo = pickle.load(fp)

!我的问题在于:方法Foo :: new 未执行

    >>>foo
    __main__.Foo

1 个答案:

答案 0 :(得分:0)

方法不正确。

替换为以下内容,解决我的问题。

def __new__(cls, *args, **kwds):
    print('Foo:__new__')
    print('args: [{}]'.format(args))
    print('kwds: [{}]'.format(kwds))
    return object.__new__(cls)