Sagen wir, ich habe eine Klasse, die von ndarray_plus
numpy.ndarray
erbt und fügt einige zusätzliche Funktionen. Manchmal übergebe ich es an numpy Funktionen wie np.sum
und bekomme ein Objekt vom Typ ndarray_plus
zurück, wie erwartet.Numpy Funktionen haue meine ererbten Datentyp
Andere Zeiten, numpy Funktionen, die ich mein erweitertes Objekt übergeben, um ein numpy.ndarray
Objekt zurückzugeben, die Informationen in den zusätzlichen Attributen ndarray_plus
zu zerstören. Dies geschieht normalerweise, wenn die in Frage kommende numpige Funktion eine np.asarray
statt np.asanyarray
tut.
Gibt es eine Möglichkeit, dies zu verhindern? Ich kann nicht in die numpy Codebasis gehen und alle Instanzen von np.asarray
zu np.asanyarray
ändern. Gibt es einen pythonischen Weg, mein geerbtes Objekt präventiv zu schützen?
Eine Unterklasse wie 'np.matrix' eine Menge Code hat gewidmet, um die Klasse und Attribute beibehalten wird. Dasselbe gilt für 'np.ma'. Das ist der Grund, warum das Unterklassifizieren von 'ndarray' keine triviale Aufgabe ist. Ich würde vorschlagen, diese Beispiele zu studieren. – hpaulj
Ok, zweiter Versuch. Da Sie das definierte Verhalten von 'np.asarray' beobachten, ist es schwer zu erkennen, was Sie tun könnten. Du könntest versuchen und 'asarray' mit 'asanarray' affektieren, wenn es funktioniert und mit deinen Standards der Pythonizität kompatibel ist. –
@hpaulj wie ich es gelesen habe, sobald deine Unterklasse in die Klauen von 'asarray' fällt, ist es fertig,' Matrix' ist sicherlich. –