Выделение динамически сгенерированных классов?

Я использую type()для динамической генерации классов, которые в конечном итоге будут обработаны. Проблема в том, что процессу травления un -требуется определение класса для повторного -конструирования объекта, который был подвергнут травлению.

Вот где я застрял. Я не знаю, как каким-то образом предоставить распаковщику способ сгенерировать экземпляр класса, который был сгенерирован динамически.

Любые подсказки приветствуются.

Спасибо!

Вот пример задачи:

    >>> class Foo(object):
   ...     pass
    >>> g=type('Goo',(Foo,),{'run':lambda self,x: 2*x } )()
    >>> cPickle.dumps(g)

    PicklingError: Can't pickle <class '__main__.Goo'>: attribute lookup __main__.Goo failed

Очевидно, это работает, но только из динамических классов, созданных из pickle -способного базового класса (с определением модуля find -способного):

import cPickle

class Foo(object): pass

def dynamic(): return type('Goo',(Foo,),{'run':lambda self,x: 2*x } )()

g=type('Goo',(Foo,),{'run':lambda self,x: 2*x, '__reduce__': lambda self: (dynamic,tuple()) } )()

gg=cPickle.loads ( cPickle.dumps(g) )
print gg.run(10)
28
задан reckoner 2 August 2012 в 15:40
поделиться