Preserve benutzerdefinierte Attribute beim Beizen der Unterklasse von Numpy Array

Ich habe eine Unterklasse von numpy ndarray nach @ erstelldie numpy Dokumentation. Insbesondere habe ich ein benutzerdefiniertes Attribut hinzugefügt durch Ändern des bereitgestellten Codes.

Ich bearbeite Instanzen dieser Klasse in einer parallelen Schleife mit Pythonmultiprocessing. Wie ich es verstehe, verwendet die Art und Weise, wie der Gültigkeitsbereich im Wesentlichen in mehrere Threads 'kopiert' wird,pickle.

Das Problem, auf das ich jetzt stoße, betrifft die Art und Weise, wie numpy Arrays eingelegt werden. Ich kann keine umfassende Dokumentation zu diesem Thema finden, aber einigediskussionen zwischen den Dill-Entwicklern schlagen vor, dass ich mich auf das @ konzentrieren soll__reduce__ Methode, die beim Beizen aufgerufen wird.

Kann jemand mehr Licht ins Dunkel bringen? Das minimale Arbeitsbeispiel ist wirklich nur der numpy Beispielcode, den ich oben verlinkt habe. Der Vollständigkeit halber hier kopiert:

import numpy as np

class RealisticInfoArray(np.ndarray):

    def __new__(cls, input_array, info=None):
        # Input array is an already formed ndarray instance
        # We first cast to be our class type
        obj = np.asarray(input_array).view(cls)
        # add the new attribute to the created instance
        obj.info = info
        # Finally, we must return the newly created object:
        return obj

    def __array_finalize__(self, obj):
        # see InfoArray.__array_finalize__ for comments
        if obj is None: return
        self.info = getattr(obj, 'info', None)

Jetzt ist hier das Problem:

import pickle

obj = RealisticInfoArray([1, 2, 3], info='foo')
print obj.info  # 'foo'

pickle_str = pickle.dumps(obj)
new_obj = pickle.loads(pickle_str)
print new_obj.info  #  raises AttributeError

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage