OOP-Anfängerproblem
Verfasst: Montag 24. März 2014, 18:04
Hallo allerseits.
Ich stehe vor folgendem Problem: ich habe eine gegebene Anzahl von unterschiedlichen pdf-Dateien, deren Inhalt ich auswerten möchte.
Der prinzipielle Ablauf ist wie folgt:
- über subprocess.check_output pdftotext ausführen und den Textinhalt der Rechungs-PDF entgegennehmen
- den Textstring untersuchen und bestimmen, von welchen Händler die Rechung ausgestellt wurde
- mit diesem Wissen jetzt relevante Daten aus dem Textstring auslesen, etwa den Rechnungsbetrag
Natürlich könnte ich alles in eine einzige Routine mit tausend ifs packen, aber schön ist natürlich etwas anderes. Also dachte ich als erstes (und vermutlich falsch) an eine Klasse Rechnung, die in ihrer init-Routine die ersten zwei Schritte absolviert. Soweit so gut, problematisch wird es dann aber bei Schritt 3. Jetzt könnte ich natürlich alle weiteren Methoden mit dem Parameter des Rechnungserstellers aufrufen (etwa: invoice.return_billing_amount('Amazon') ) und in der Routine wiederum mit einer if-Abfrage verfahren, je nachdem welches Unternehmen übergeben wurde, aber der Übersicht ist das nicht dienlich, selbst wenn ich für jedes einzelne Unternehmen eine separate Prozedur aufrufe.
Alternativ hatte ich auch schon daran gedacht, vorneweg ein Dictionary anzulegen, welches die Namen an die entsprechenden Routinen bindet, als Pseudocode etwa:
Vermutlich liegt die Lösung in OOP, aber hier ist mir nicht klar, von welcher Seite ich das Pferd aufzäume. Eine Klasse invoice, dann wiederum Klassen für die einzelnen Händler die von invoice erben? Und die Händlererkennung als statische Methode (womit ich einen Begriff verwendet habe, den ich vermutlich nicht einmal richtig verstanden habe
)?
Oder so:
Aber dann müßte ich ja händisch alle Methoden an die Methoden von Amazon_Invoice binden?!
Mein Ziel soll sein:
Ein dezenter Stoß in die richtige Richtung wäre klasse!
Dank und Gruß,
Daniel
Ich stehe vor folgendem Problem: ich habe eine gegebene Anzahl von unterschiedlichen pdf-Dateien, deren Inhalt ich auswerten möchte.
Der prinzipielle Ablauf ist wie folgt:
- über subprocess.check_output pdftotext ausführen und den Textinhalt der Rechungs-PDF entgegennehmen
- den Textstring untersuchen und bestimmen, von welchen Händler die Rechung ausgestellt wurde
- mit diesem Wissen jetzt relevante Daten aus dem Textstring auslesen, etwa den Rechnungsbetrag
Natürlich könnte ich alles in eine einzige Routine mit tausend ifs packen, aber schön ist natürlich etwas anderes. Also dachte ich als erstes (und vermutlich falsch) an eine Klasse Rechnung, die in ihrer init-Routine die ersten zwei Schritte absolviert. Soweit so gut, problematisch wird es dann aber bei Schritt 3. Jetzt könnte ich natürlich alle weiteren Methoden mit dem Parameter des Rechnungserstellers aufrufen (etwa: invoice.return_billing_amount('Amazon') ) und in der Routine wiederum mit einer if-Abfrage verfahren, je nachdem welches Unternehmen übergeben wurde, aber der Übersicht ist das nicht dienlich, selbst wenn ich für jedes einzelne Unternehmen eine separate Prozedur aufrufe.
Alternativ hatte ich auch schon daran gedacht, vorneweg ein Dictionary anzulegen, welches die Namen an die entsprechenden Routinen bindet, als Pseudocode etwa:
Code: Alles auswählen
def return_billing_amount_amazon():
[...]
return_billing_amount = {'Amazon': return_billing_amount_amazon}
print return_billing_amount['Amazon']()
Oder so:
Code: Alles auswählen
class Amazon_Invoice(object):
[...]
class Invoice(object):
def __init__(self):
# Erkennung des Händlers
[...]
if dealer_name == 'Amazon':
self.invoice = Amazon_Invoice( ... )
Mein Ziel soll sein:
Code: Alles auswählen
[...]
invoice = Invoice('Rechnung.pdf')
print invoice.return_billing_amount()
Dank und Gruß,
Daniel