Seite 1 von 1

Iteration über Objekte

Verfasst: Dienstag 15. Juni 2010, 11:15
von mikanoca
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 ?

Re: Iteration über Objekte

Verfasst: Dienstag 15. Juni 2010, 11:32
von .robert
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'})

Re: Iteration über Objekte

Verfasst: Dienstag 15. Juni 2010, 11:35
von CM
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

Re: Iteration über Objekte

Verfasst: Dienstag 15. Juni 2010, 11:47
von mikanoca
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 ?

Re: Iteration über Objekte

Verfasst: Dienstag 15. Juni 2010, 11:51
von CM
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 ...

Re: Iteration über Objekte

Verfasst: Dienstag 15. Juni 2010, 12:00
von mikanoca
gut, ich denk noch mal nach

vielleicht ist das Brett ja jetzt weg :wink:

Danke

Re: Iteration über Objekte

Verfasst: Dienstag 15. Juni 2010, 13:28
von gkuhl
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