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.Pandas DataFrame Objektvererbung oder Objektverwendung?
ich zur Zeit debattiert zwischen
Option 1: Objektvererbung
class CTMatrix(pd.DataFrame):
methods etc. here
oder Option 2: Objekt
class CTMatrix(object):
_data = pd.DataFrame
then use getter, setter methods to control access to _data etc.
Von einem Software-Engineering-Perspektive verwenden wird ein offensichtliche Wahl hier?
Meine Gedanken sind so weit:
Option 1:
- Datenrahmen Methoden direkt auf der CTMatrix Klasse (wie
CTmatrix.sort()
), ohne sie über Methoden auf dem eingekapselten_data
Objekt verwenden kann, um Unterstützung in Option # 2 - Updates und neue Methoden in Pandas werden vererbt, außer für Methoden, die mit lokalen Klassenmethoden überschrieben werden können
BUT
- Komplikationen bei einigen Methoden wie
__init__()
ist und die Attribute verzichten auf die übergeordnete Klassesuper(MyDF, self).__init__(*args, **kw)
Option 2:
- mehr Kontrolle über das Klasse und ihr Verhalten
- Vielleicht widerstandsfähiger gegen Updates in Pandas?
Aber
- Mit einem Getter() oder nicht verborgen Attribut verwenden, um das Objekt wie ein Datenrahmen wie (
CTMatrix.data.sort()
)
zu verwenden Gibt es zusätzliche Nachteile für die Aufnahme der Ansatz in Option # 1?
Wahrscheinlich besser geeignet für http://codereview.stackexchange.com/ – EdChum