OOP

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
zappa
User
Beiträge: 26
Registriert: Samstag 19. März 2011, 22:31

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.
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ß
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.
zappa
User
Beiträge: 26
Registriert: Samstag 19. März 2011, 22:31

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