Seite 1 von 1

OOP

Verfasst: Freitag 10. Juni 2011, 21:47
von zappa
Hi, ich bin noch recht neu mit Python und v.a. mit OOP und kapier eine Sache nicht:
Dieser Code steht in einem Buch, mit dem ich versuche mir Python beizubringen (hab einen Teil natürlich weggelassen).

Code: Alles auswählen

class Train():
    speed = 0 #was hat dieses "speed" mit dem speed in changeSpeed bzw in der while-Schleife unten zu tun? Sind das alle die gleichen speeds???

    def __init__(self,seats):
        self.seats = seats
    def changeSpeed(self, speed, action):
        if speed < 0:
            print (irgendwas)
            return
.
.
.
    while self.speed != speed: #hier auch wieder: woher kommt jetzt das self.speed und was ist das speed? 
        self.speed += 10*act #vorher wurde act schon initialisiert

Ich hoffe, das sind genug Infos und ich freue mich über viele klärende Antworten.

Re: OOP

Verfasst: Freitag 10. Juni 2011, 22:02
von problembär
Also, ich kann verstehen, daß Dich das verwirrt.
Ich persönlich packe alle Initialisierungen in die __init__-Methode und auch das, was sonst noch bei Initialisierung der Klasse ausgeführt werden soll.
Das sähe dann (unter Python 2.x) so aus:

Code: Alles auswählen

#!/usr/bin/env python
# coding: iso-8859-1

class Train:

    def __init__(self, seats, speed, act, otherspeed):
        self.seats = seats
        self.speed = speed
        self.act = act
        while self.speed != otherspeed:
            self.speed += 10 * self.act 
            print "Speed changed."

    def changeSpeed(self):
        if self.speed < 0:
            print "irgendwas"

atrain = Train(50, 0, 10, 100)
Ich hoffe, das ist so ein bißchen verständlicher. Obwohl in dem Beispiel die changeSpeed()-Methode gar nicht aufgerufen und gebraucht wurde.

Gruß

Re: OOP

Verfasst: Freitag 10. Juni 2011, 22:28
von BlackJack
@zappa: Die ``while``-Schleife ist wirklich auf der Ebene der Klasse und nicht in einer Methode!?

Wo `self.speed` bei einem Lesezugriff her kommt, ist davon abhängig ob es so ein Attribut auf `self` gibt oder nicht. Wenn ja, dann kommt es direkt von `self`, ansonsten wird in der Klassenhierarchie vom Typ von `self` danach gesucht, bis es als Attribut einer Klasse gefunden wird. Zuweisungen an `self.speed` binden immer ein Attribut direkt an `self`.

Wo `speed` her kommt, kann man an dem Quelltext den Du zeigst nicht erkennen.

Wie problembär schon vorgeschlagen hat, sollte das auch besser in der `__init__()` initialisiert werden. Denn die Geschwindigkeit ist ja eine individuelle Eigenschaft jedes einzelnen Zugs.

Re: OOP

Verfasst: Samstag 11. Juni 2011, 20:10
von zappa
Vielen Dank für die schnellen Antworten. Ich glaube, so langsam komme ich drauf, was es mit dem ``self`` auf sich hat. Habe mich auch nochmal bei "A byte of python" belesen, da wird's sehr verständlich erläutert.
BlackJack hat geschrieben:@zappa: Die ``while``-Schleife ist wirklich auf der Ebene der Klasse und nicht in einer Methode!?
Nein, du hast recht - das war ein Abschreibfehler (ich hatte, der Einfachheit halber) einige Passagen weggelassen und mich dann in den Einrückungen vertan. Die while-Schleife kommt weiter unten in einer extra Methode.