Objektorientiertes Programmieren Zeit

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.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

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.
http://www.kinderpornos.info
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.
Benutzeravatar
snafu
User
Beiträge: 6866
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Sconine
User
Beiträge: 49
Registriert: Montag 1. Juni 2009, 11:00

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.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

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.
http://www.kinderpornos.info
Sconine
User
Beiträge: 49
Registriert: Montag 1. Juni 2009, 11:00

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.
Sconine
User
Beiträge: 49
Registriert: Montag 1. Juni 2009, 11:00

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. :cry:

Bei meinerzeit werden doch die ersten Werte für h, m, s gegeben.
Bei andererzeit stehen doch die Werte, die mit meinerzeit addiert werden.
Benutzeravatar
snafu
User
Beiträge: 6866
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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...
Antworten