Iteration über Objekte

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
mikanoca
User
Beiträge: 26
Registriert: Dienstag 15. Juni 2010, 11:02

Hi,

wahrscheinlich habe ich ein Brett vor dem Kopf, aber irgendwie krieg ich es nicht hin:

Ich habe ein DatenEnsemble, dessen Elemente jeweils aus einem Datum besteht und einem zugehörigen Objekt:
class DateEnsemble():
from datetime import date

def __init__(self):
self.date = []
self.value= []
Nun soll es eine Methode setEntry geben, die einen beliebigen Eintrag in dem Ensemble setzen soll.
def setEntry(self, myDate, newValue):
???
Kann mir jemand helfen ?
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Hi,

ich bin mir nicht ganz sicher ob ich in deinen Post das rein interpretieren, was du auch meinst, aber ich vermute mal dass dein Fehler bereits im Design der Klasse "DateEnsemble" liegt.

Vielleicht beschreibst du mal näher, was dein Problem ist bzw. was du genau am Ende für Funktionalität haben willst.

Schönen Gruß,
r.


Edith:

Vielleicht als kleiner Hinweise:
Es gibt Dictionarys!

Code: Alles auswählen

l = []
l.append({'date':'20100615','value':'test1'})
l.append({'date':'20100616','value':'test2'})
Zuletzt geändert von .robert am Dienstag 15. Juni 2010, 11:37, insgesamt 1-mal geändert.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hallo und willkommen im Forum,

so ganz klar, was Du machen willst, ist mir die Sache nicht, aber:

- Es ist keine gute Idee einen Import innerhalb einer Klassendefinition zu machen. Gar keine gute Idee! Imports gehören (mit wenigen Ausnahmen) an den Anfang eines Moduls.
- In Python nutzt man keine (bzw. sehr selten) setter-Methoden. Du kannst direkt auf die Attribute zugreifen:

Code: Alles auswählen

de = DateEnsemble()
de.date.append(some new date)
- Wenn Du Python < 3 verwendest solltest Du ggf. noch von 'object' ableiten / erben, also:

Code: Alles auswählen

class DateEnseble(object):
- das Eigentliche aber ist: Zum Zuweisen von Parametern / Variablen oder wie auch immer Du das nennen möchstest, kann man in Python direkt dicts nehmen:

Code: Alles auswählen

de = dict()
de[some date] = value
Näheres erfährst Du im Tutorial, daß Du Dir unbedingt anschauen solltest.
- Wenn Deine Klasse eines schönen Tages ein dict sein soll, aber mehr können muß, dann bleibt Dir natürlich auch noch von dict abzuleiten, aber das ist sicher etwas für die Zeit nach dem Tutoriallesen. ;-)

Ich hoffe, ich habe Dich richtig verstanden. Ansonsten: siehe .roberts Post.

HTH
Christian
mikanoca
User
Beiträge: 26
Registriert: Dienstag 15. Juni 2010, 11:02

also das Objekt dieser Klasse soll mein DatenEnsemble repräsentieren. Im Prinzip stelle ich mir das als eine Liste vor, in der der Index ein Datum ist und die Listenelemente meine Werte (die allerdings Objekte einer anderen Klasse sind - Details, sind wohl unwichtig)

Ich lese die Daten aus einem File ein, wobei ich zuerst ein Element erzeuge mit (ist vielleicht noch nicht ganz richtig):

def addEntry(self, newDate, values):
self.date.append([newDate])
self.value.append(values)
return self
Nun werden die Werte im Programm evtl. verändert, ich muss also das DatenEnsemble auch updaten können.
Ich würde auch gern die Reihenfolge behalten.

Wird's klarer ?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Nein. ;-) Was spricht gleich noch gegen ein dict? (Man kann auch sortiert über ein solches iterieren.)

edit: Wie setzt Du Code als Zitat? Dafür gibt es den Python-Tag ...
mikanoca
User
Beiträge: 26
Registriert: Dienstag 15. Juni 2010, 11:02

gut, ich denk noch mal nach

vielleicht ist das Brett ja jetzt weg :wink:

Danke
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Ein bisschen zusätzliche Anregungen:

Code: Alles auswählen

In [13]: from datetime import date as Date

In [14]: yesterday = Date(2010,6,14)

In [15]: today = Date(2010,6,15)

In [16]: tomorrow = Date(2010,6,16)

In [17]: data = dict()

In [18]: data[yesterday] = 'gestern'

In [20]: data[today] = 'today'

In [21]: data[tomorrow] = 'tomorrow'

In [22]: data
Out[22]: 
{datetime.date(2010, 6, 14): 'gestern',
 datetime.date(2010, 6, 15): 'today',
 datetime.date(2010, 6, 16): 'tomorrow'}

In [23]: other_data = {Date(2010,1,1): 'neujahr'}

In [24]: other_data
Out[24]: {datetime.date(2010, 1, 1): 'neujahr'}

In [25]: data.update(other_data)

In [26]: data
Out[26]: 
{datetime.date(2010, 1, 1): 'neujahr',
 datetime.date(2010, 6, 14): 'gestern',
 datetime.date(2010, 6, 15): 'today',
 datetime.date(2010, 6, 16): 'tomorrow'}
Grüße
Gerrit
Antworten