Seite 1 von 1

prinzipielle Entscheidung: Dictionary oder eigene Klasse?

Verfasst: Donnerstag 5. April 2012, 09:15
von mcdwerner
Hallo!

Mein neues Projekt soll ein Lernkartei-Programm werden und ich stehe aktuell vor der Entscheidung in welcher Form ich die einzelnen Lernkarten abspeichere.

als Klasse:

Code: Alles auswählen

class Card(object):
	def __init__(self, front, back):
		self.front_content = front
		self.back_content = back
		self.create_time = time.time()	

#die Zeit, die eine Karte zum lernen angezeigt wird soll individuell sein:
		self.time_to_learn = len(back) + len(front) 
Vorteil der Klasse: flexibler, da ich bei Bedarf individuelle Methoden schreiben könnte


oder als Dictionary:

Code: Alles auswählen

new_card = {"front_content" : "..." , "back_content" : "..." , "create_time" : "...", "time_to_learn" : "..."}
Vorteil des Dictionary: jede Menge Standard-Methoden stehen zur Verfügung

Was fallen euch noch für Argumente ein?

Viele Grüße, Werner

Re: prinzipielle Entscheidung: Dictionary oder eigene Klasse

Verfasst: Donnerstag 5. April 2012, 09:34
von jbs
Du kannst auch von ``dict`` erben und dort eigene Methoden implementieren.

Re: prinzipielle Entscheidung: Dictionary oder eigene Klasse

Verfasst: Donnerstag 5. April 2012, 11:43
von Hyperion
Die Frage ist doch, inwiefern ein Lernkartenobjekt selber Funktionalität besitzen können soll? Evtl. gibt es Werte, die immer wieder gebraucht werden, aber die direkt von anderen Werten abhängig und berechenbar sind. Dafür böten sich dann Properties an - das ist sicher schicker, als für einen Wert eine Funktion mit dem Dict als Parameter aufzurufen. Dein `time_to_leran` wäre dafür imho prädestiniert.

Auch eine eigene `__str__`-Methode kann ja schon ein Vorteil sein ;-)

Das Argument mit den "Standardmethoden" kapiere ich jetzt nicht wirklich. Wie meinst Du das genau?

Re: prinzipielle Entscheidung: Dictionary oder eigene Klasse

Verfasst: Donnerstag 5. April 2012, 14:37
von mcdwerner
@Hyperion: Da es ein reines Lernprojekt (im doppelten Sinn) für mich ist, möchte ich schon die Möglichkeit offen halten dem Lernkartenobjekt noch eigene Funktionalität zu geben.

mit Standardmethoden meine ich sowas wie "key in dict" http://docs.python.org/library/stdtypes ... pesmapping welche mir ja zur Verfügung stehen würden, wenn ich meine Klasse von ''dict'' erben lasse, wie von jbs vorgeschlagen.

PS: ich hab grad mal nachgesehen, die Anzahl der Standardmethoden für ein dict ist recht überschaubar, oder überseh ich da was?

Re: prinzipielle Entscheidung: Dictionary oder eigene Klasse

Verfasst: Donnerstag 5. April 2012, 14:52
von deets
Ich wuerde ein eigenes Objekt dafuer implementieren - von dict zu erben bringt dir nur dann was, wenn es fuer die Karteikarte wirklich wichtig ist, beliebige Key/Values zu beinhalten. Das sehe ich jetzt nicht.

Re: prinzipielle Entscheidung: Dictionary oder eigene Klasse

Verfasst: Donnerstag 5. April 2012, 15:05
von DasIch
Sobald du heterogene Werte hast würde ich ein namedtuple oder eine Klasse verwenden.

Re: prinzipielle Entscheidung: Dictionary oder eigene Klasse

Verfasst: Donnerstag 5. April 2012, 16:11
von mcdwerner
Danke für die Antworten!

Von den "dict-Standard-Methoden" hab ich mir wahrscheinlich zu viel erwartet...

Ich werde flexibel bleiben, als Klasse implementieren und bei weiteren Fragen mich einfach wieder hier melden.

(Bin immer wieder begeistert vom Forum!)

Re: prinzipielle Entscheidung: Dictionary oder eigene Klasse

Verfasst: Donnerstag 5. April 2012, 17:23
von Dav1d
Du kannst diese "dict-Standard-Methoden" auch in deiner Klasse implementieren. "key in dict" wird zu dict.__contains__(key), d.h. du musst nur die __contains__-Methode implementieren. Lektüre: http://docs.python.org/reference/datamo ... iner-types