Ich baue eine Bibliothek für die Arbeit mit sehr spezifischen strukturierten Daten und baue meine Infrastruktur auf Pandas. Momentan schreibe ich eine Reihe von verschiedenen Datencontainern für verschiedene Anwendungsfälle, wie CTMatrix für Land x Zeitdaten usw., um Methoden zu integrieren, die für alle strukturierten Daten von CountryxTime geeignet sind.
Ich diskutiere derzeit zwischen
Option 1: Objektvererbung
%Vor%oder Option 2: Objekt verwenden
%Vor%Aus einer Software-Engineering-Perspektive gibt es hier eine offensichtliche Wahl?
Meine bisherigen Gedanken sind:
Option 1:
CTmatrix.sort()
), ohne sie über Methoden auf dem verkapselten _data
-Objekt in Option # 2 ABER
__init__()
und die Attribute an die Oberklasse super(MyDF, self).__init__(*args, **kw)
Option 2:
Aber
CTMatrix.data.sort()
) Gibt es zusätzliche Nachteile für den Ansatz in Option # 1?
Ich würde die Unterklasse DataFrame
vermeiden, weil viele der DataFrame
-Methoden eine neue DataFrame
und keine weitere Instanz Ihres CTMatrix
-Objekts zurückgeben.
Es gibt ein paar offene Probleme auf GitHub, z. B .:
Allgemeiner ist dies eine Frage der Zusammensetzung gegen die Vererbung. Ich würde besonders auf Vorteil # 2 achten. Es mag jetzt großartig erscheinen, aber solange du nicht die Updates für Pandas im Auge behältst (und es ist ein sich schnell bewegendes Ziel), kannst du leicht mit unerwarteten Konsequenzen enden und dein Code wird schließlich mit Pandas verflochten.
Wegen ähnlicher Probleme und Matti Johns Antwort schrieb ich eine _pandas_wrapper
Klasse für ein Projekt von mir, weil ich auch von Pandas Dataframe erben wollte.
Der einzige Zweck dieser Klasse besteht darin, einem Pandas DataFrame ein Aussehen zu geben, das sicher erben kann.
Wenn Ihr Projekt LGPL lizensiert ist, können Sie es ohne Probleme wiederverwenden.
Tags und Links python inheritance oop pandas