this und self
In Java schreibst du this.feld. In Python self.feld. Beide bedeuten dasselbe:
"Greif auf das Feld dieser konkreten Instanz zu."
Wenn du innerhalb einer Methode this.kmh schreibst, meinst du das kmh-Feld des Objekts, auf dem die Methode gerade aufgerufen wurde.
auto1.beschleunigen(); // this.kmh ist auto1.kmh
auto2.beschleunigen(); // this.kmh ist auto2.kmh
Zugriffsrechte: public vs private
In Java steuerst du, wer ein Feld lesen darf:
- public: jeder darf zugreifen —
auto1.tank von außen lesbar/schreibbar
- private: nur die Klasse selbst —
auto1.tank von außen nicht zugänglich
Konvention: Felder sind oft private, Zugriff über Getter und Setter:
private int tank;
public int getTank() { return this.tank; }
public void setTank(int t) { this.tank = t; }
In Python gibt's das offiziell nicht — Konvention: Felder mit Unterstrich am Anfang (_tank) sind als "intern" markiert.
Encapsulation (Kapselung)
Das ist die Hauptidee von OOP:
Verstecke den State (Felder), erlaube Änderungen nur über Methoden.
So kannst du Regeln durchsetzen. Z.B.: "tank darf nicht negativ werden":
public void beschleunigen() {
if (this.tank > 0) { // Regel im Konstruktor durchsetzen
this.kmh += 20;
this.tank -= 5;
}
}
Würde jemand direkt auto1.tank = -50 setzen, wäre der State kaputt. Mit private + Getter/Setter kannst du das verhindern.