Seite 2 von 2
Verfasst: Montag 15. Juni 2009, 13:51
von Dill
programmieren ist ein handwerk das man lernen muss wie jedes andere auch. wie kommst du auf die idee, dass du das nach ein paar wochen beherrschst? das dauert eben seine zeit.
es ist wichtig, dass du sorgfältig arbeitest und verstehst was vorgeht.
insbesondere solltest du verstehen, was eine klasse ist, was eine instanz ist und was es mit dem "self" auf sich hat.
Code: Alles auswählen
In [2]: class C: #eine Klasse
...: def test(self):
...: print "self: ", self
In [4]: c = C() #c wird eine instanz der klasse C
In [5]: c
Out[5]: <__main__.C instance at 0x0160DB20>
#in self ist die aktuelle instanz gespeichert.
#hast du dich nie gewundert, dass du diesen parameter nicht übergeben musst?
In [6]: c.test()
self: <__main__.C instance at 0x0160DB20>
#das kommt daher, dass hier eigentlich etwas in der art passiert:
In [8]: C.test(c)
self: <__main__.C instance at 0x0160DB20>
versuch nochmal meine fragen zu GrafZahl zu beantworten.
Verfasst: Montag 15. Juni 2009, 14:56
von BlackJack
@snafu: Bitte nicht solche Tipps zur Typprüfung geben! Python ist kein Java. Was ist, wenn ich eine `MeineZeit`-Klasse schreibe, die sich richtig verhält, aber nur wegen so einer dusseligen Typprüfung abgeleht wird? Damit macht man sich das "duck typing" kaputt -- eins der Merkmale, warum Python so nett ist.
Verfasst: Montag 15. Juni 2009, 15:08
von snafu
Stimmt. Man merkt ja, ob das übergebene Objekt eine `in_seconds()`-Methode hat, wenn sie aufgerufen werden soll. Wobei ich das ohnehin als Attribut und nicht als Methode implementieren würde.
Verfasst: Montag 15. Juni 2009, 15:28
von Sconine
Ich habe es versucht nochmal alleine neuzuschreiben:
Code: Alles auswählen
class Zeit:
def __init__(self,hours=0,minutes=0,seconds=0):
self.hours = hours
self.minutes = minutes
self.seconds = seconds
def in_seconds(self):
s = self.hours*3600+self.minutes*60+self.seconds
return s
def seconds_to_time(self,s):
h, rests = divmod(s,3600)
m, s = divmod(rests, 60)
self.hours, self.minutes, self.seconds = h, m, s
return Zeit (h, m, s)
def __add__(self, andere_zeit):
h, rests = divmod (s, 3600)
m, s = divmod (rests, 60)
self.hours, self.minutes, self.seconds = h, m, s
return Zeit (h, m, s)
def __str__(self):
return "%d:%d:%d" % (self.hours, self.minutes, self.seconds)
meinezeit = Zeit(13, 37, 59)
anderezeit = Zeit(1, 2 ,3)
drittezeit = Zeit()
neuezeit = Zeit()
x = meinezeit
y = anderezeit
z = neuezeit
print meinezeit.__str__()
print meinezeit.in_seconds()
#neuezeit = x + y
#print z
neuezeit = meinezeit.__str__ + anderezeit.__str__
print neuezeit.__str__
drittezeit.seconds_to_time(4845)
print drittezeit.__str__()
Ich übergebe doch die Werte von meinerzeit und anderezeit an def __add__
meinezeit:
h = 13
m = 37
s= 59
anderezeit:
h = 1
m = 2
s = 3
Was muss ich denn jetzt noch machen, damit endlich damit gerechnet wird?
Ich habe schon einiges versucht, aber ich komme auf keine Lösung.
Verfasst: Montag 15. Juni 2009, 15:33
von Dill
du hast immernoch nicht verstanden was andere_zeit überhaupt ist. ein objekt, eine instanz deiner zeit klasse. das musst du dir erstmal klarmachen was das bedeutet und was man damit anfängt. dann kannst du auch die __add__ methode implementieren.
Verfasst: Montag 15. Juni 2009, 16:50
von Sconine
Wie gesagt, ich kann es nachvollziehen, was bei Grafzahl gemacht wird, aber ich schaffe es einfach nicht in mein Programm einzusetzen!!!
Muss ich schon bei def __add__ bei return meinezeit + anderezeit schreiben oder return h, m, s und unten beim Print schreiben, was er bei __add__ machen soll.
Ich bin echt völlig fertig, so dass ich glaube, dass ich nochnichtmal mehr die Frage richtig formulieren kann.
Ab wo ist denn bei mir der Fehler bei __add__? Vielleicht bringt es mich dann weiter.
Verfasst: Montag 15. Juni 2009, 17:25
von Sconine
Ich sitze jetzt schon den ganzen Tag daran und habe immernoch die Probleme mit __add__
Kann mir einer sagen, was ich da genau falsch mache?
Es kann doch nicht sein, dass die Aufgabe wegen der __add__-Methode scheiter.
Ich gucke mir die ganze Zeit Grafzahl an, aber ich bekomme es bei class Zeit nicht hin.
Bei meinerzeit werden doch die ersten Werte für h, m, s gegeben.
Bei andererzeit stehen doch die Werte, die mit meinerzeit addiert werden.
Verfasst: Montag 15. Juni 2009, 18:30
von snafu
Der entscheidende Fehler ist, dass bei dem von dir zuletzt geposteten `__add__()` zwar `andere_zeit` als Argument angenommen aber danach gar nicht verwendet wird. Woher sollen die Attribute dann auch kommen? Du musst die Instanz schon ansprechen...