Funktion oder Klasse?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
pixewakb
User
Beiträge: 1407
Registriert: Sonntag 24. April 2011, 19:43

Eine Konzeptions-/Verständnisfrage: Ich muss einen Auskunfts-Geber schreiben, der eine ID zwischen zwei Programmen übersetzt. Ein Tool gibt die ID an und will wissen, wie es beim anderen heißt. Letztlich wird da so etwas stehen wie:

[1] klasse.get_id_by_id2(id2) # Klasse

oder

[2] get_id_by_id2(id2) # Funktion.

Ich habe inzwischen gelernt, dass eine Klasse mit nur einer Funktion eigentlich ein Hinweis ist, dass es sich um eine Funktion handelt und ich eine Funktion schreiben sollte. Aber: Ich muss eine csv-Datei (ca. 200 Datenzeilen) einlesen und im Betrieb zwischen 100 und 200 Abfragen erledigen (lassen). Ich könnte Zeit sparen, wenn ich die Daten in der Klasse vorhalte, statt sie bei jeder Anfrage wieder neu von der Festplatte zu laden.

Wie würdet ihr es lösen?
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

pixewakb hat geschrieben: Wie würdet ihr es lösen?
Ich weiß nicht, ob das der allerbeste Stil ist, aber für "Funktionen mit Gedächtnis" verwende ich persönlich ganz gerne das, was manchmal Funktionsobjekt genannt wird, also Instanzen von Klassen, die __call__ implementieren. Die Datei wird in '__init__' eingelesen und kann dann bei jedem "Funktions"aufruf adressiert werden. Eine andere Variante wäre, das mittels eines Closures zu lösen.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@pixewakb: Du hast eine Zuordnung ID1->ID2 und brauchst dazu weder eine Klasse noch eine Funktion, sondern nur ein Wörterbuch.
Benutzeravatar
pixewakb
User
Beiträge: 1407
Registriert: Sonntag 24. April 2011, 19:43

Ich hatte schon gedacht die Frage wäre einfach und hatte ein schlechtes Gewissen, dass ich sie stelle.

Closures kenne ich noch nicht und sehe ich mir morgen direkt an.

@Sirius3: Leuchtet ein und erscheint mir sehr attraktiv. Allerdings brauche ich die Funktionalität in einigen Tools und möchte sie aus einem Modul einbinden. Wie bekomme ich die csv-Datei von der Festplatte in ein Wörterbuch, das ich importieren kann?

Die Klasse oder eine Funktion hat in anderen Fällen dann den Ladevorgang gekapselt und dann Anfragen erledigt.
BlackJack

@pixewakb: Bei der Klasse würdest Du das doch wahrscheinlich in der `__init__()` laden — in ein Wörterbuch das ein Attribut auf dem Exemplar ist. Statt Klasse und `__init__()` bräuchtest Du eine Funktion die das Wörterbuch aus der Datei erstellt.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

pixewakb hat geschrieben:Ich muss eine csv-Datei (ca. 200 Datenzeilen) einlesen und im Betrieb zwischen 100 und 200 Abfragen erledigen (lassen). Ich könnte Zeit sparen, wenn ich die Daten in der Klasse vorhalte, statt sie bei jeder Anfrage wieder neu von der Festplatte zu laden.
Dann gehst du es falsch an. Schreibe eine Funktion, die die Daten vorbereitet. Schreibe eine weitere Funktion zur Verarbeitung der Daten. Das wäre sozusagen die zweite Methode deiner Klasse. Falls du ziemlich viele Argumente an die Verarbeitung übergeben musst, dann könntest du z.B. ein namedtuple einsetzen, um die Übergabe etwas eleganter zu lösen.
Benutzeravatar
pixewakb
User
Beiträge: 1407
Registriert: Sonntag 24. April 2011, 19:43

@Blackjack:
Statt Klasse und `__init__()` bräuchtest Du eine Funktion die das Wörterbuch aus der Datei erstellt.
Danke Dir und Danke an alle, ich stand ziemlich auf dem Schlauch und habe das jetzt kurz erledigt. Da habe ich den Wald vor ... nicht gesehen :(
Antworten