2016-12-08 2 views
1

Я разрабатываю класс, который должен управлять памятью в своем методе __new__. Он работает хорошо, когда я создаю объект. Но __new__ не выполняется при использовании pickle.loadPython 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 :: новый не выполняется

>>>foo 
    __main__.Foo 
+0

Это всего лишь примерный класс, а не класс, который должен управлять своей памятью –

ответ

0

новый метод не является правильным.

Замените следующим, устраните мою проблему.

def __new__(cls, *args, **kwds): 
    print('Foo:__new__') 
    print('args: [{}]'.format(args)) 
    print('kwds: [{}]'.format(kwds)) 
    return object.__new__(cls) 
Смежные вопросы